BeautifulSoup
имеет свою собственную реализацию синтаксического анализа CSS-селектора, которая в основном анализирует строку селектора CSS и переводит ее в команды «поиска»: исходный код .
Хотя это довольно простонаписать find()
или find_all()
версию nth-child
в целом.Но я понимаю, что было бы неудобно всегда помнить об этом ограничении и переводить селектор или часть селектора для «поиска» языка.
В качестве альтернативы вы можете проверить parsel
пакет , который в целом имеет лучшую поддержку селектора CSS:
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'