Python 空列表作为scrapy响应对象的输出

Python 空列表作为scrapy响应对象的输出,python,scrapy,Python,Scrapy,我正在抓取这个,当我试图从一个元素中提取文本时,我遇到了一个死胡同 因此,图中所示为所讨论的元素- 此元素中的文本位于内的标记内。我尝试使用以下代码提取scrapyshell中的文本-response.css(“div.home-hero-blurb no select::text”).getall()。结果我收到了一张空名单 或者,如果我尝试更进一步,分别引用标记,我可以得到文本。为什么会发生这种情况?不是父元素吗?我的代码不应该提取文本吗 注意-我想使用div,因为我认为这将帮助我在一个查

我正在抓取这个,当我试图从一个元素中提取文本时,我遇到了一个死胡同

因此,图中所示为所讨论的元素-

此元素中的文本位于
内的
标记内。我尝试使用以下代码提取
scrapy
shell中的文本-
response.css(“div.home-hero-blurb no select::text”).getall()
。结果我收到了一张空名单

或者,如果我尝试更进一步,分别引用
标记,我可以得到文本。为什么会发生这种情况?
不是父元素吗?我的代码不应该提取文本吗


注意-我想使用
div
,因为我认为这将帮助我在一个查询中获得两个
标记。

我可以在这里看到两个问题

首先,如果用空格分隔类名,css选择器将理解您正在寻找该名称的子元素。因此正确的方法是
“div.home-hero-blurb.no select::text”
,而不是
“div.home-hero-blurb no select::text”

第二个问题是所需的文本位于
p
元素中,该元素是该
div
的子元素。如果您仅选择
div
,选择器将返回
div
中的文本,但不会返回其child中的文本。由于
p
的子元素也有
strong
元素,因此我建议使用通才方法,如:

response.css("div.home-hero-blurb.no-select *::text").getall()
这将返回
div及其子体中的所有文本

需要指出的是,从css选择器中提取文本是标准选择器的扩展。请你提一下

编辑 如果要使用XPath,这将是等效的表达式:

response.xpath('//div[@class="home-hero-blurb no-select"]//text()').getall()

所以,如果我想使用XPath使用这种通用方法,我该怎么做?@ArifKhan我用XPath等价表达式编辑了我的答案。如果我的回答解决了您的问题,请单击复选标记接受。