【问题标题】:Scrapy: extracting data from an html tag that uses an "id" Selector instead of a "class"Scrapy:从使用“id”选择器而不是“类”的html标签中提取数据
【发布时间】:2017-07-25 20:41:10
【问题描述】:

我是网络抓取和 Scrapy 的新手。我希望你能帮助我。

我正在尝试从使用标签的网页中提取数据。通常,如果 span 标签使用的是一个类,例如:

<span class="class_A>Hello, World!</span>

我将使用以下代码来检索文本。

request.css('span.class_A::text').extract()

但是,例如,当 html 现在使用“id”而不是“class”时,

<span id="id_A>Hello, Universe!</span>

下面的代码不再工作了。

request.css('span.id_A::text').extract()

请帮忙!使用“id”提取数据的正确方法是什么。

感谢您的帮助!

【问题讨论】:

    标签: web-scraping scrapy


    【解决方案1】:

    这是一种方式。

    >>> HTML = '''
    ... <span id="id_A">Hello, Earth</span>
    ... <span id="id_B">Hello, Universe</span>
    ... '''
    >>> from scrapy.selector import Selector
    >>> selector = Selector(text=HTML)
    >>> selector.css('[id="id_A"]::text').extract()
    ['Hello, Earth']
    

    或者,

    >>> HTML = '''
    ... <span id="id_A">Hello, Earth</span>
    ... <span id="id_B">Hello, Universe</span>
    ... '''
    >>> from scrapy.selector import Selector
    >>> selector = Selector(text=HTML)
    >>> selector.css('span#id_A::text').extract()
    ['Hello, Earth']
    

    Scrapy 使用 cssselect 跟在 W3 Selectors Level 3 之后

    【讨论】:

    • 嗨,谢谢。如何在不输入 html 代码的情况下执行此操作?
    【解决方案2】:

    问题在于您使用的是“类选择器”(请查看this 以供参考)。你真的应该使用“id 选择器”,这应该可以工作:

    response.css('#id_A::text').extract()
    

    【讨论】:

    • 嗨,谢谢。但是,这仍然是一个空列表。
    • 什么鬼,我试了很多次。它不起作用。现在,当我尝试使用另一个具有不同 ID 的跨度时,它起作用了。然后,我用这个 再次尝试,它已经工作了吗?刚刚发生了什么?当我回顾一切时,一切都一样。但是,非常感谢!我对你的帮助感到非常高兴。这对我有很大帮助,但我仍在努力弄清楚刚刚发生了什么。
    猜你喜欢
    • 2019-04-20
    • 2018-07-15
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    相关资源
    最近更新 更多