正在阅读Scrapy。我的python技能很弱,但我通常能够在试验,错误和决心上构建一些东西......
我可以通过我的项目网站运行并抓取“结构化”的产品数据。 对于每页具有不同行和值的表,会出现此问题。 在一个例子中,我可以得到产品的名称和价格。
问题在于下面的表格,产品有不同的规格和不同的行数,但总是2列。我试图通过计算<tr>
来循环,并为每个获取第一个<td>
作为标签,第二个<td>
作为相应的值。然后将其与其他页面数据一起附加以创建1个条目。
最后我想要产生名称:名称,价格:价格,标签X:价值X,标签y:价值y
<div>name</div>
<div>price</div>
<table>
<tr><td>LABEL X</td><td>VALUE X</td></tr>
<tr><td>LABEL Y</td><td>VALUE Y</td></tr>
<tr><td>LABEL Z</td><td>VALUE Z</td></tr>
Could be anywhere from 2 to 6 rows
</table>
任何帮助都会非常感激,或者如果有人能指出我的例子。
编辑&gt;&gt;&gt;&gt;
HTML代码
<table class="table table-striped">
<tbody>
<tr>
<td><b>Name:</b></td>
<td>Car</td>
</tr>
<tr>
<td><b>Brand:</b></td>
<td itemprop="brand">Merc</td>
</tr>
<tr>
<td><b>Size:</b></td>
<td>30 XL</td>
</tr>
<tr>
<td><b>Color:</b></td>
<td>white</td>
</tr>
<tr>
<td><b>Stock</b></td>
<td>20</td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
你应该发布一些Scrapy代码来帮助我们。
无论如何,这是您可以用来解析HTML的代码。
for row in response.css('table > tr'):
data = {}
data['name'] = row.css("td:nth-child(1) b::text").extract()[0]
data['value'] = row.css("td:nth-child(2)::text").extract()[0]
yield MyItem(name = data['name'], value = data['value'])
<强> PS:强>
不要在xpath上的选择器中使用tbody
,现代浏览器会添加tbody
,它不会包含在原始响应中。
见这里:https://doc.scrapy.org/en/0.14/topics/firefox.html
Firefox尤其以向表格添加元素而闻名。另一方面,Scrapy不会修改原始页面HTML,因此如果使用,您将无法提取任何数据