【问题标题】:How can I use a CSS Selector to select a class name that changes dynamically?如何使用 CSS 选择器来选择动态更改的类名?
【发布时间】:2021-08-18 09:15:22
【问题描述】:

我正在尝试像这样解析 HTML:

<div id="layers" class="r-1d2f490 r-u8s1d r-zchlnj r-ipm5af r-184en5c" style=""><div class="css-1dbjc4n r-aqfbo4 r-1p0dtai r-1d2f490 r-12vffkv r-1xcajam r-zchlnj">

在我的例子中,类名随着每个请求不断变化,我该如何解析这个元素?

我试过了:

from bs4 import BeautifulSoup

container = soup.find_all('div', attrs={'class':'r-1d2f490 r-u8s1d r-zchlnj r-ipm5af r-184en5c"'})
print(container)

它有时会产生一个结果,但有时它会返回一个空列表。如何使用带有正则表达式的 CSS 选择器来抓取类?

【问题讨论】:

    标签: python regex web-scraping beautifulsoup


    【解决方案1】:

    由于您的班级名称发生了变化,请尝试定位 id(应该是唯一的)。

    您可以将 id 作为关键字参数传递给.find()。 在你的情况下使用id="layers":

    soup = BeautifulSoup(html, "html.parser")
    
    print(soup.find("div", id="layers"))
    

    【讨论】:

      【解决方案2】:

      在您的class 属性中,您还有style 属性和另一个div。如果这是一个错字,请更正它并给出一个您想要解析的代码示例,以便我们进行更好的研究。

      【讨论】:

      • 不,这不是错字,而是网页的结果
      • 我说的是attrs={'class':'r-1d2f490 r-u8s1d r-zchlnj r-ipm5af r-184en5c" style=""&gt;&lt;div class="css-1dbjc4n r-aqfbo4 r-1p0dtai r-1d2f490 r-12vffkv r-1xcajam r-zchlnj'}。您能否澄清一下它是如何依赖于页面结果的?
      猜你喜欢
      • 1970-01-01
      • 2014-03-21
      • 2014-03-08
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 2014-08-28
      • 2015-12-05
      相关资源
      最近更新 更多