使用Scrapy和XPath解析表中的信息

时间:2018-11-22 20:04:28

标签: python xpath scrapy

我正在尝试从scrapy和xpath的网站中提取属性:

response.xpath('//section[@id="attributes"]/div/table/tbody/tr/td/text()').extract()

属性通过以下方式嵌套:

<section id="attributes">
<h5>Attributes</h5>
    <div>
        <table>
            <tbody>
                <tr>
                    <td>Attribute 1</td>
                    <td>Value 1</td>
                </tr>           
                <tr>
                    <td>Attriburte 2</td>
                    <td>Value 2</td>
                </tr>

与此相关的有两个问题:

  1. 获取td元素的内容(XPath命令将返回[])
  2. 一旦检索到td,就需要以某种方式进行配对。例如:“属性1” =“值1”

我是phyton和scrapy的新手,非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

首先,您应该尝试从XPath删除tbody标记,因为它通常不在页面源代码中。

您可以按以下方式更新代码:

cells = response.xpath('//section[@id="attributes"]/div/table//tr/td/text()').extract()
att_values = [{first: second} for first, second in zip(cells[::2], cells[1::2])]

您将获得属性值对的列表:

[{attr_1: value_1}, {attr_2: value_2}, {attr_3: value_3}, ...]

att_values = {first: second for first, second in zip(cells[::2], cells[1::2])}

获取字典

{attr_1: value_1, attr_2: value_2, attr_3: value_3, ...}

答案 1 :(得分:1)

尝试:

for row in response.css('section#attributes table tr'):
    td1 = row.xpath('.//td[1]/text()').get()
    td2 = row.xpath('.//td[2]/text()').get()
    # your logic further