如何使用Scrapy抓取未标记的数据?

kjthegm6  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(117)

我想尝试用Scrapy进行网页抓取,并选择了link to the Wikipedia page for the Day January 1作为一个通用的例子,我没有问题提取标签:

In [9]: response.css('div.mw-parser-output ul li a::text').getall()

给出以下输出:

Out[9]: ['153 BC',
 'Roman consuls',
 '[1]',
 '45 BC',
 'Julian calendar',
 '[2]',
 '42 BC',
 'Roman Senate',
 'deifies',
 'Julius Caesar',
 '[3]',
 '193',...]

然而,我也希望这一文本“开始他们的一年在办公室1月1日”,
Im.(1): Here is the text
检查HTML,它似乎不是任何标签的一部分,只是标记为(文本):
Im.(2): The HMTL version
有可能进入吗?
当我这样做的时候,是否有一种in-Scrapy方法来连接响应的适当元素,例如它的第一个元素-事件的零索引:

In [18]: events = response.css('div.mw-parser-output ul li a::text').getall()

In [19]: print(events[0])
Out [19]: 153 BC

是否在Im.(1)中看到了整个文本,而不是仅仅“公元前153年”?
我希望(text)被附加到a标签::text之一,但显然不是,因为它没有任何直接的标签、类或任何HMTL标识符。我不知道该怎么办,任何帮助都是非常感激的。

mctunoxg

mctunoxg1#

您正在查找的文本是li元素的一部分,该元素是您当前从中提取文本的a元素的父元素。
这一切都可以使用xpath表达式轻松提取,例如:

In [18]: events = response.css('div.mw-parser-output ul li').xpath('.//text()').getall()

上面的表达式应该抓取你当前抓取的所有文本加上你没有得到的所有文本。

相关问题