【问题标题】:Beautiful soup - How to get <li> items from div class and <ul> without any class name for ul and without ID美丽的汤 - 如何从 div 类和 <ul> 中获取 <li> 项目,而没有任何 ul 的类名和 ID
【发布时间】:2019-08-23 01:31:48
【问题描述】:

输入数据如下,其中有多个ul标签,在python美汤中同样可以抓取。

&lt;div class="column one-second"&gt;&lt;p&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Commercial automobile&lt;/li&gt; &lt;li&gt;Excess liability&lt;/li&gt; &lt;li&gt;General liability&lt;/li&gt; &lt;li&gt;Inland marine (cargo)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;div class="column one-second"&gt;&lt;p&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Professional Liability&lt;/li&gt; &lt;li&gt;Property&lt;/li&gt; &lt;li&gt;Workers’ compensation&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt;

To get the listed items from `ul` tag using beautiful soup library, I tried this but did not work:

    amusements_soup.find_all('li', attrs={'id': 'menu-item-16'})


    amusements_soup.find_all('div',{'class':'column one-second'})


    ul = amusements_soup.find("h2", text="Services & Solutions").find_next_sibling("ul")

expected output :

> Commercial automobile
> 
> Excess liability
> 
> General liability
>
> Inland marine 
>
> Professional Liability
> 
> Workers’ compensation

【问题讨论】:

  • 只使用lis = soup.find_all('li'); uls = soup.find_all('ul')怎么样?
  • 但我只需要特定类别的 li 项目,如下所示:

    • 商用汽车
    • 超额责任
    • 一般责任
    • 内陆海运(货物)

  • 如果您只想要特定类的li 项目,那么为什么您不想使用任何classID 属性?这就是他们的目的.. 只找到那些项目。
  • 没有可用的ID属性!!
  • 那么您从哪里获得class 属性?我也没有看到任何 class 属性,但你正在使用它

标签: python html beautifulsoup


【解决方案1】:

与使用列表理解的后代组合器的类和类型选择器相同

results = [item.text for item in amusements_soup.select('.one-second li')]

【讨论】:

    【解决方案2】:

    假设 amusements_soup 包含您提到的 HTML,这应该有效:

    from bs4 import BeautifulSoup
    
    page = '<div class="column one-second"><p></p> <ul> <li>Commercial automobile</li> <li>Excess liability</li> <li>General liability</li> <li>Inland marine (cargo)</li> </ul> <p></p></div> <div class="column one-second"><p></p> <ul> <li>Professional Liability</li> <li>Property</li> <li>Workers’ compensation</li> </ul> <p></p></div>'
    amusements_soup = BeautifulSoup(page,"html.parser")
    for item in amusements_soup.findAll('div',{'class':'column one-second'}):
        sub_items = item.findAll('li')
        for sub_item in sub_items:
            print(sub_item.text)
    

    输出:

    Commercial automobile
    Excess liability
    General liability
    Inland marine (cargo)
    Professional Liability
    Property
    Workers’ compensation
    

    如果这不适合您,您必须检查 amusements_soup 是否真的是您认为的那样

    【讨论】:

      猜你喜欢
      • 2015-03-20
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      相关资源
      最近更新 更多