Scrapy.根据内容查找标签

7xllpg7q  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(142)

如何通过内容找到标签?这是我找到必要元素的方法,但某些页面的结构不同,这并不总是有效。

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(),
            ...                
        }
idfiyjo8

idfiyjo81#

查看代码示例

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']
sz81bmfz

sz81bmfz2#

如果您想一次从div.provider-item标签中提取所有数据点,可以尝试此操作(如果span.h2标签中有“key”,span标签中有itemprop属性的value

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
jq6vz3qz

jq6vz3qz3#

添加此答案,因为OP向已接受的答案添加了一条注解,说明他在使用CSS选择器实现解决方案时遇到错误。
使用CSS选择器查找包含文本片段的元素的正确方法是:

response.css("span:contains('Education')").getall()

请注意,整个选择器字符串使用双引号,其中的文本片段使用单引号

相关问题