html - 有什么方法可以得到一个带有 nth-of-type 伪类的 CSS 选择器?
问题描述
Chrome 的检查工具使用 nth-child 复制 CSS 选择器 - bs4 不支持。是否有任何用于浏览器、浏览器或应用程序的附加组件来复制其中包含 nth-of-type 伪类的 CSS 选择器?
解决方案
BeautifulSoup
有自己的 CSS 选择器解析实现,它基本上解析 CSS 选择器字符串并将其转换为“查找”命令:源代码。
虽然写一个find()
或find_all()
版本的nth-child
一般来说非常简单。但是,我理解,始终牢记这一限制并将选择器或选择器的一部分翻译为“查找”语言可能会很不方便。
作为替代方案,您可以查看通常具有更好的 CSS 选择器支持的parsel
包:
In [1]: from parsel import Selector
In [2]: sel = Selector(text="""<html>
...: <body>
...: <h1>Hello, Parsel!</h1>
...: <ul>
...: <li><a href="http://example.com">Link 1</a></li>
...: <li><a href="http://scrapy.org">Link 2</a></li>
...: </ul
...: </body>
...: </html>""")
In [3]: sel.css('ul li:nth-child(2) a::attr(href)').extract_first()
Out[3]: 'http://scrapy.org'
推荐阅读
- java - 如何捕获多个异常并循环,直到获得有效输入?
- ios - 如何在 Firebase 存储中的 TableViewCell 中显示图像
- python - Python - 有条件地加入两个字典列表
- r - 如何在保留整个数据框的同时将函数应用于我的数据子集?
- html - 为什么在网页中查看时,我的 HTML 表格顶部会出现字母“fo”?
- javascript - 使用 puppeteer 从未知 li 中检索数据
- node.js - 错误 TS2507:类型 'typeof Tapable' 不是构造函数类型
- cmd - 使用cmd运行pmd?
- javascript - 如何在每个浏览器(IE、firefox、chrome)上打开带有 ssl 证书列表的弹出窗口
- jquery - 无法向元素添加数据属性