【问题标题】:Get href using css selector with Scrapy使用带有 Scrapy 的 css 选择器获取 href
【发布时间】: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 来选择属性。

标签: python python-2.7 scrapy


【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多