我需要一个表中的ISBN号...我尝试了一些现在显示的示例,但无法获得ISBN。
我的想法是,在tr循环中运行所有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)
表格看起来像这样(图片)click here
表代码看起来像这样
<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>
所以我需要在找到ISBN的同一个tr中有此td跨度文本。
但还有一个问题是,if "ISBN" in td:
似乎不起作用,原因是有时它后面有一个“-”。
答案 0 :(得分:1)
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 :(得分:1)
使用XPath:
response.xpath('//td[.="EAN / ISBN-13"]/following-sibling::td[1]/text()').get()