【问题标题】:Scrapy. find a tag by its content刮痧。按内容查找标签
【发布时间】:2020-05-13 02:20:12
【问题描述】:

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

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

【问题讨论】:

  • 嗨,Sasha,您能否通过添加一些示例,通过显示预期输出和哪里出错,让问题更清楚一些?
  • 嗨@VishnuVS! HTML 代码:<div class="listing-info listing-6 provider-item"> <span class="listing-h2 h2-style">Education</span> <span itemprop="alumniOf" class="">A.B. in Economics with a minor in Asian Studies, <br>Occidental College<br>Masters in Chinese Medicine, Tai Hsuan Foundation</span> </div>
  • 我找到了“教育”这个标题:response.xpath("string(//span[contains(., 'Education')])").get()如何获取下面的文字?

标签: python css scrapy css-selectors


【解决方案1】:

查看代码示例

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

【讨论】:

  • 谢谢。有用。如何通过 CSS 选择器找到这个元素?
  • 查看链接link1link2
  • 我尝试使用 CSS:response.css(span:contains("Education")) 我得到 SyntaxError: invalid syntax
【解决方案2】:

如果你想一次从div.provider-item标签中提取所有数据点,你可以试试这个(如果span.h2标签内的“key”和span标签内的value带有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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2013-03-15
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多