Python scrapy从表列表中获取详细信息

Python scrapy从表列表中获取详细信息,python,scrapy,Python,Scrapy,我需要一张表上的ISBN号码。。。我尝试了一些类似我现在展示的例子的东西,但它无法获得ISBN 我的想法是,在循环中运行所有tr,使每个td都在循环中。 然后,如果我在一个td中找到了“ISBN”,那么就从中获取下一个td和.span文本,因为有数字 for tr in response.css('.ry-product-details__fullscreen-scrollable table tr'): td = tr.css('::text')[0].extract().st

我需要一张表上的ISBN号码。。。我尝试了一些类似我现在展示的例子的东西,但它无法获得ISBN

我的想法是,在循环中运行所有tr,使每个td都在循环中。 然后,如果我在一个td中找到了“ISBN”,那么就从中获取下一个td和.span文本,因为有数字

for tr in response.css('.ry-product-details__fullscreen-scrollable table tr'):
        td = tr.css('::text')[0].extract().strip()
        print(td)
        if "ISBN" in td:
            isbn = tr.css('td .span::text')[0].extract().strip()
            print(isbn)
这张桌子看起来像那样(图)

表代码如下所示

<table class="table ry-table ry-content-page__table">
    <thead>
        <tr>
        <th colspan="2">Details</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Bluetooth</td>
            <td><span>Ja</span></td>
        </tr>
        <tr>
            <td>EAN / ISBN-13</td>
            <td><span>0888462149143, 5055887319009, 0888462149082</span></td>
        </tr>
        <tr>
            ..... some more here ...
        </tr>

细节
蓝牙
青年成就
EAN/ISBN-13
0888462149143, 5055887319009, 0888462149082
..... 这里还有一些。。。
所以我需要在ISBN所在的同一个tr中找到这个td span文本。 但另一个问题是,td:中的
if“ISBN”似乎不起作用,因为它后面有时会有“-”这个词…

scrapy shell
   scrapy shell 
In [1]: body=''' <tr>
       ...:             <td>Bluetooth</td>
       ...:             <td><span>Ja</span></td>
       ...:         </tr>
       ...:         <tr>
       ...:             <td>EAN / ISBN-13</td>
       ...:             <td><span>0888462149143, 5055887319009, 08884
       ...: 62149082</span></td>
       ...:         </tr>'''
    In [2]: from scrapy import Selector

    In [3]: sel = Selector(text=body, type="html")
    In [4]: sel.xpath("//tr[contains(., 'ISBN')]/td[2]/span/text()").extract()
    Out[5]: ['0888462149143, 5055887319009, 0888462149082']
在[1]中:正文=“” …:蓝牙 …:是的 ...: ...: …:EAN/ISBN-13 ...: 0888462149143, 5055887319009, 08884 ...: 62149082 ...: ''' 在[2]中:来自刮擦导入选择器 在[3]中:sel=选择器(text=body,type=“html”) [4]中的sel.xpath(//tr[contains(,'ISBN')]/td[2]/span/text()”).extract() 出[5]:['0888462149143505588873190090888462149082']
粘壳
在[1]中:正文=“”
…:蓝牙
…:是的
...:         
...:         
…:EAN/ISBN-13
...:             0888462149143, 5055887319009, 08884
...: 62149082
...:         '''
在[2]中:来自刮擦导入选择器
在[3]中:sel=选择器(text=body,type=“html”)
[4]中的sel.xpath(//tr[contains(,'ISBN')]/td[2]/span/text()”).extract()
出[5]:['0888462149143505588873190090888462149082']
使用XPath:

response.xpath('//td[.="EAN / ISBN-13"]/following-sibling::td[1]/text()').get()
使用XPath:

response.xpath('//td[.="EAN / ISBN-13"]/following-sibling::td[1]/text()').get()

span前的点表示您正在查找span类,而这不是您想要的…在css选择器中,请尝试仅使用“span::text()”谢谢。。。我的失败。。所以我的想法是正确的,谢谢,它在没有span前的“.”的情况下工作了。不用担心,乐于帮助span前的点意味着你正在寻找span类,而这不是你想要的…在css选择器中,尝试只使用“span::text()”谢谢。。。我的失败。。所以我的想法是正确的,谢谢,它在没有“斯潘前”的情况下工作了。不用担心,很乐意帮忙