【问题标题】:CSS selector does not find element with provided classCSS 选择器找不到具有提供的类的元素
【发布时间】:2017-01-10 16:11:26
【问题描述】:

我要废弃的 html 如下所示:

<a class="mobile_board_link" href="board.php"><b>...</b></a>

我为元素创建了以下 CSS 选择器:

.mobile_board_link a::attr(href)

但如果我在scrapy shell 中执行它,它甚至找不到任何带有移动板链接的a 元素。我做错了什么?

【问题讨论】:

  • 改用a.mobile_board_link
  • 它甚至没有找到元素。 [href] 是 ::atr() 的替代语法吗?
  • 对不起。查看我修改后的评论
  • 您在哪里找到::attr(..) 语法?这是错误的。属性的正常 CSS 语法确实是 [href]。或者这是一个 Scrappy 扩展?
  • @Mr Lister:它是 Scrapy 的一部分。它以字符串形式返回给定属性的值(尽管您在选择后仍需要使用 .extract() 提取此字符串)。有趣的是,它出现在名为Non-element Selectors 的 CSSWG 草案中,尽管我确信它很久以前就存在于 Scrapy 中。

标签: html web-scraping css-selectors scrapy


【解决方案1】:

这是你的选择器:

.mobile_board_link a::attr(href)

问题:

  • 空格表示后代,因此您试图在 .mobile_board_link 中查找锚点,而不是使用该类查找锚点
  • 后面的斜体文字是错误的,正如评论部分所指出的,它反映在底部的这篇文章中正如评论中已经指出的那样你需要[href]而不是::attr(href)的部分

所以你的选择器应该是这样的:

a[href].mobile_board_link

编辑:

显然::attr(href) 在 Scrapy 中是正确的,因此这是一个正确的选择器:

a.mobile_board_link::attr(href)

【讨论】:

  • 如果他们正在寻找 href 属性的值,则无需使用 [href] 通过其 href 选择元素,他们可以使用 ::attr(href) 来获取直接取值。这是 Scrapy 的一个功能。
  • @BoltClock 感谢您指出这一点,我已经相应地编辑了我的答案。
  • 也许考虑从这个答案中删除不正确的信息(关于 ::attr 错误)?
  • @eis 你是对的我错了,但是,由于历史原因,我保留了它并确保它在编辑中得到修复。你是对的,因为不阅读整篇文章的人会留下不正确的印象。我想保留它,因此对 BoltClock 的批评将仍然是有效的评论,但该帖子将确保没有误解。我现在就做,请耐心等待。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 2011-02-12
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多