Scrapy. найти тег по его содержанию - PullRequest
0 голосов
/ 27 января 2020

Как найти тег по его содержимому? Вот как я нахожу необходимые элементы, но структура на некоторых страницах отличается, и это не всегда работает.

yield {
            ...
            'Education': response.css('.provider-item:nth-child(3) .h2-style+ span::text').get(),
            'Training': response.css('.provider-item:nth-child(4) .h2-style+ span::text').get(),
            ...                
        }

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Если вы хотите извлечь все точки данных из тегов div.provider-item сразу, вы можете попробовать это (если «ключ» внутри тега span.h2 и value внутри тега span с атрибутом itemprop

data = {}
for item in response.css("div.provider-item"):
    key = item.css("span.listing-h2.h2-style::text").extract_first()
    value = item.css("span[itemprop]::text").extract()
    #value = item.css("span::text").extract()[1:]
    data[key] = value

Если каждый из тегов div.provider-item имеет строго 2 span тега, вы можете попробовать что-то вроде этого:

data = {}
for item in response.css("div.provider-item"):
    key, value = item.css("span::text").extract()
    data[key] = value
0 голосов
/ 28 января 2020

Проверьте пример кода

In [4]: i = response.xpath('.//span[contains(text(),"Education")]')

In [5]: i
Out[5]: [<Selector xpath='.//span[contains(text(),"Education")]' data='<span class="listing-h2 h2-style">Edu...'>]

In [6]: i.xpath('following-sibling::span[1]/text()').extract()
Out[6]:
['A.B. in Economics with a minor in Asian Studies, ',
 'Occidental College',
 'Masters in Chinese Medicine, Tai Hsuan Foundation']
...