Разбор информации из таблиц с помощью Scrapy и XPath - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь извлечь атрибуты с веб-сайта с помощью 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>

Есть две проблемы, связанные сthis:

  1. Получить содержимое элементов td (команда XPath вернет [])
  2. После получения td мне нужно каким-то образом получить соединение.Например: «Атрибут 1» = «Значение 1»

Я новичок в фитоне и скрапе, любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Прежде всего вы должны попытаться удалить тег tbody из XPath, поскольку обычно его нет в источнике страницы.

Вы можете обновить свой код, как показано ниже:

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, ...}
0 голосов
/ 22 ноября 2018

Попробуйте:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...