使用带有 Scrapy 的 css 选择器获取 href

Posted

技术标签:

【中文标题】使用带有 Scrapy 的 css 选择器获取 href【英文标题】:Get href using css selector with Scrapy 【发布时间】:2014-02-06 12:45:11 【问题描述】:

我想获取href 值:

<span class="title">
  <a href="https://www.example.com"></a>
</span>

我试过了:

Link = Link1.css('span[class=title] a::text').extract()[0]

但我只是得到&lt;a&gt; 中的文本。如何获取href 中的链接?

【问题讨论】:

您能否提供更多有关您正在使用的内容和您尝试解析的代码的详细信息?可能想尝试a::@hrefa::href 来选择属性。 【参考方案1】:

您正在寻找的是:

Link = Link1.css('span[class=title] a::attr(href)').extract()[0]

由于您还匹配span“class”属性,您甚至可以编写

Link = Link1.css('span.title a::attr(href)').extract()[0]

请注意,::text 伪元素和::attr(attributename) 功能伪元素是不是标准 CSS3 选择器。它们是 Scrapy 0.20 中 CSS 选择器的扩展。


编辑(2017-07-20):从 Scrapy 1.0 开始,您可以使用 .extract_first() 代替 .extract()[0]

Link = Link1.css('span[class=title] a::attr(href)').extract_first()
Link = Link1.css('span.title a::attr(href)').extract_first()

【讨论】:

“extract()[0]”看起来很糟糕,是否可以 extract 单个值而不是列表? 有这个提议:github.com/scrapy/scrapy/issues/568(相当多的争论)。有了这个 PR:github.com/scrapy/scrapy/pull/624。我个人希望看到.get().getall() 在哪里可以看到所有 Scrapy 的 CSS 扩展?在文档中找不到。 Scrapy 的扩展记录在 Parsel 文档(选择器库)中:parsel.readthedocs.io/en/latest/… 你可以简单地使用Link = Link1.css('span.title a::attr(href)').get()【参考方案2】:
Link = Link1.css('span.title a::attr(href)').extract_first()

you can get more infomation from this

【讨论】:

【参考方案3】:

这样就可以了:

Link = Link1.css('span.title a::attr(href)').extract()

Link 的值为:https://www.example.com

【讨论】:

以上是关于使用带有 Scrapy 的 css 选择器获取 href的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Scrapy 中使用多个嵌套跨度 CSS 选择器?

Scrapy:: 如何在 CSS 选择器中使用“not”来跳过元素

使用ID的css选择器在scrapy中不起作用

当带有 extract() 的 Scrapy 选择器返回 None 时如何设置默认值?

Scrapy模块

第三百四十节,Python分布式爬虫打造搜索引擎Scrapy精讲—css选择器