【问题标题】:How to get non element text adjacent to a tag using Scrapy?如何使用 Scrapy 获取与标签相邻的非元素文本?
【发布时间】:2020-05-05 17:14:43
【问题描述】:

我正在尝试使用 Scrapy 框架抓取页面。

<div class="info"><span class="label">Establishment year</span> 2014</div>

我要处理的标签如上所示。我想获得 2014 年的值。我不能使用 info 或 label class,因为它们在页面中很常见。

所以,我在 xpath 下尝试了,但我得到了 null:

response.xpath("//span[contains(text(),'Establishment year')]/following-sibling").get()

response.xpath("//span[contains(text(),'Establishment year')]/following-sibling::text()").get()

任何线索可能是什么问题?

【问题讨论】:

    标签: python web-scraping scrapy parsel


    【解决方案1】:

    由于您试图在标签之间提取它,因此您应该在最后使用标签。我不知道您要抓取哪个网站,但这是我在此网站上的“a”标签之间抓取的示例http://books.toscrape.com/ 这是我用于它的代码

    response.xpath("(//h3)[1]/a/text()").extract_first()
    

    在您的第二行代码中,您没有正确使用提取文本的功能。您正在使用的是 CSS 选择器。对于 Xpath,如果是 /text(),而不是 ::text()。对于您的代码,我认为您应该尝试这些选项之一。让我知道它是否有帮助。

    response.xpath("//span[contains(text(),'Establishment year')]/div/text()").get()
    

    response.xpath("//span[contains(text(),'Establishment year')]/span/text()").get()
    

    【讨论】:

    • 问题是我在 之后没有标签。如果我尝试 /div/text() 或 /span/text() 它对我不起作用。
    • 可以提供网站链接吗?
    【解决方案2】:

    从父元素中提取直接文本子元素 (/text()):

    >>> from parsel import Selector
    >>> selector = Selector(text='<div class="info"><span class="label">Establishment year</span> 2014</div>')
    >>> selector.xpath('//*[@class="info"]/text()').get()
    ' 2014'
    

    【讨论】:

    • 是的。我不能使用信息类,因为页面上有很多。我尝试了类似的方法,它对我有用: response.xpath("//span[contains(text(),'Establishment year')]/../text()").get()
    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2022-01-21
    • 2019-05-07
    相关资源
    最近更新 更多