我正在尝试使用 BeautifulSoup 查找具有 :: 标记的 li 元素,如下所示。
我尝试使用cssutils,但没有成功(也许我用错了)
伪代码:
lis = soup_obj.find_all("li")
for li in lis:
if li (has :: marker): # This is what I would like to do
print(li)
提前感谢您的帮助。
据我所知,您将无法使用 cssutils,因为伪元素
::marker
不受支持的语法。根据https://pythonhosted.org/cssutils/README.html#overview
下
此处定义的选择器语法(而不是在 CSS 2.1 中)应该是 可使用 cssutils 进行解析(不过应该介意;))
您看到支持的应该是(第 7 节):
7.1.The ::first-line pseudo-element
7.2.The ::first-letter pseudo-element
7.4.The ::before and ::after pseudo-elements
Soup Sieve 旨在允许用户使用 CSS 定位 XML/HTML 元素 选择器。它实现了许多伪类,但它没有 目前正在实现任何伪元素,并且没有计划这样做。
也许相关的是您是否可以尝试通过 Selenium 自动化使用 JavaScript。值得注意的讨论是这里的评论:
getComputedStyle
的,但这与您的最终目标不同。
示例页面,如果其他人想玩,请在本页底部项目符号:
https://webdesign.tutsplus.com/tutorials/next-level-list-bullets-with-css-marker--cms-37212
只要该链接仍然有效。
可能有另一种模式可以用来定位所需的节点。因此,如果公开且可自由访问,分享链接将会有所帮助。
我发现的最简单的解决方法是使用:
list(li.stripped_strings)[-1]
不起作用,这是CSS缺陷:
.mw-body p+ul>li:has(>::marker)
我发现的最简单的解决方法是使用:
list(li.stripped_strings)[-1]
不起作用,这是CSS缺陷:
.mw-body p+ul>li:has(>::marker)