首页 > 解决方案 > 有什么方法可以得到一个带有 nth-of-type 伪类的 CSS 选择器?

问题描述

Chrome 的检查工具使用 nth-child 复制 CSS 选择器 - bs4 不支持。是否有任何用于浏览器、浏览器或应用程序的附加组件来复制其中包含 nth-of-type 伪类的 CSS 选择器?

标签: htmlparsingbeautifulsoup

解决方案


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'

推荐阅读