Соответствующие элементы, которые не являются вложенными (scrapy) - PullRequest
0 голосов
/ 19 марта 2020

Я довольно новичок в Python и пробую скрапинг в первый раз, и застрял в группировке HTML элементов, которые не являются вложенными.

Таким образом, в основном два HTML элемента повторяются каждый раз и принадлежат друг другу. Поскольку UL не вложен в H2, я застрял в том, как их объединить.

enter image description here

Я пытаюсь получить список даты и уязвимости, использующие следующие структурированные данные:

March 10, 2020 (Date)
.MFSA 2020-10 (UID) 
..Level high (Severity)
../en-US/security/advisories/mfsa2020-10/ (Url)
..Security Vulnerabilities fixed in Thunderbird 68.6 (Description)
.MFSA 2020-09 (UID) 
..Level high (Severity)
../en-US/security/advisories/mfsa2020-09/ (Url)
..Security Vulnerabilities fixed in Firefox ESR 68.6 (Description)

До сих пор я делал ручную очистку с помощью оболочки:

scrapy shell 'https://www.mozilla.org/en-US/security/advisories/' 

>>>response.css('article.mzp-c-article h2::text').get()
'March 10, 2020'

>>>response.css('article.mzp-c-article a::attr(href)').get()
'/en-US/security/advisories/mfsa2020-10/'

>>>response.css('li.level-item span::attr(class)')[4].get() # first few results are severity index
'level critical'

>>>response.css('li.level-item a::text').get()
' Security Vulnerabilities fixed in Thunderbird 68.6'

Проблема в том, что я не таким образом можно сопоставить Uid, Severity, URL и Description с Date.

Я думал о сборе всех данных для каждого ul с использованием 'response. css (' article.mzp- c -article ul ' ) .getall () [$ n] 'и использование RE для деконструкции необходимых данных, но это похоже на PITA. Кто-нибудь может указать мне правильное направление?

A

1 Ответ

0 голосов
/ 19 марта 2020

в этом случае вам придется использовать xpath, а не css.

response.xpath('//article//h2::following-sibling/ul/li/a/@href').extract()

Возможно, я мог бы неправильно набрать html, но в целом вы должны взглянуть на https://www.w3schools.com/xml/xpath_axes.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...