Scrapy:如何从使用“id”选择器而非“class”选择器的HTML标记中提取数据

6

我是一个新手,想学习网页抓取和Scrapy。希望你能帮助我。

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

<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”提取数据的正确方法是什么。

谢谢您的帮助!

2个回答

13

这是其中一种方法。

>>> 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选择器第3级


你好,谢谢。我如何在不输入HTML代码的情况下完成这个任务? - RF_956

8
问题在于您使用了“类选择器”(请参考此链接)。您应该使用“id选择器”,这样就可以正常工作了:
response.css('#id_A::text').extract()

嗨,谢谢。但是,这仍然会返回一个空列表。 - RF_956
1
我尝试了多次,可是它就是不起作用。现在,当我尝试使用另一个具有不同id的span时,它却奇迹般地起作用了。然后,我再次尝试使用这个<span id='id_A'>,它居然也起作用了?到底发生了什么?当我回顾一切时,似乎都没有什么变化。但是,非常感谢你的帮助!你的帮助对我很有帮助,但我仍在努力弄清楚到底发生了什么。 - RF_956

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接