Python scrapy从表列表中获取详细信息
我需要一张表上的ISBN号码。。。我尝试了一些类似我现在展示的例子的东西,但它无法获得ISBN 我的想法是,在循环中运行所有tr,使每个td都在循环中。 然后,如果我在一个td中找到了“ISBN”,那么就从中获取下一个td和.span文本,因为有数字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
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()”谢谢。。。我的失败。。所以我的想法是正确的,谢谢,它在没有“斯潘前”的情况下工作了。不用担心,很乐意帮忙