【问题标题】:How to get the div before a specific div with css selector如何使用css选择器在特定div之前获取div
【发布时间】:2021-12-23 17:43:03
【问题描述】:

可能有更好的方法来做到这一点,但我现在只需要这个工作,然后我才能想出更好的解决方案。 我正在使用 Python 和 BeautifulSoup 开发一个网页抓取应用程序。我需要抓取一个特定的 div,但该 div 的位置在不同的页面上略有变化(有时是第三个,有时是第四个等)。我想要的 div 上没有类标签或 id 标签,但我确实注意到在我想要的 div 之后总是有一个 div,并且那个有一个 id 标签。它看起来像这样:

<div id="main-container">
    <div></div>
    <div></div>
    <div>The div I want</div>
    <div id="point"></div>
    <div></div>
</div>

所以我正在寻找这样的东西:

div#main-container > div:item-before(#point)

在 CSS 中是否有任何简单的方法可以做到这一点,还是我必须想出一个更好的解决方案?

【问题讨论】:

    标签: python html css web-scraping beautifulsoup


    【解决方案1】:

    使用idclass 查找特定的div 并调用find_previous() 以获取适当的标签

    html="""<div id="main-container">
        <div></div>
        <div></div>
        <div>The div I want</div>
        <div id="point"></div>
        <div></div>
    </div>"""
    soup=BeautifulSoup(html,"html.parser")
    soup.find("div",attrs={"id":"main-container"}).find("div",attrs={"id":"point"}).find_previous()
    

    输出:

    <div>The div I want</div>
    

    【讨论】:

    • 你也可以试试soup.select_one("div#main-container &gt; div#point").find_previous()
    • 我猜这被否决了,因为它不使用 CSS 选择器,但此代码有效,是惯用的 Beautiful Soup 代码,并且 OP 对其他解决方案开放。对我来说似乎是一个很好的答案。
    【解决方案2】:

    您可以通过 CSS 文件中的第 n 个选择器访问您的 div:

     div#main-container:nth-child(3){
       /*Your code*/
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      • 2016-11-26
      • 1970-01-01
      相关资源
      最近更新 更多