如何使用 beautiful soup 从 HTML 中提取带有 ::marker 的标签

问题描述 投票:0回答:3

我正在尝试使用 BeautifulSoup 查找具有 :: 标记的 li 元素,如下所示。

我尝试使用cssutils,但没有成功(也许我用错了)

enter image description here

伪代码:

lis = soup_obj.find_all("li")
for li in lis:
  if li (has :: marker): # This is what I would like to do 
     print(li)

提前感谢您的帮助。

python html beautifulsoup
3个回答
0
投票

据我所知,您将无法使用 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 不支持伪元素

Soup Sieve 旨在允许用户使用 CSS 定位 XML/HTML 元素 选择器。它实现了许多伪类,但它没有 目前正在实现任何伪元素,并且没有计划这样做。

也许相关的是您是否可以尝试通过 Selenium 自动化使用 JavaScript。值得注意的讨论是这里的评论:

如何在使用 javascript

  • 之前选择和操作带有伪元素(例如 ::marker、:::)的特定 元素。尽管该讨论是关于
    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)
    

  • 0
    投票

    我发现的最简单的解决方法是使用:

    list(li.stripped_strings)[-1]
    

    0
    投票

    不起作用,这是CSS缺陷:

    .mw-body p+ul>li:has(>::marker)
    
    © www.soinside.com 2019 - 2024. All rights reserved.