使用scrapy

时间:2017-03-11 21:18:56

标签: python xpath scrapy

正在阅读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> 

1 个答案:

答案 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,因此如果使用,您将无法提取任何数据