【问题标题】:how to find all links inside nested lists using Beautiful Soup如何使用 Beautiful Soup 查找嵌套列表中的所有链接
【发布时间】:2020-09-25 11:21:47
【问题描述】:

<ul class="main">
<li> 
<a href="/1.html"></a>
</li>
<a href="/2.html"></a>
<li>
<a href="/3.html"></a>
</li>

</ul>

<ul class="main2">
<li> 
<a href="/1.mp4"></a>
</li>
<a href="/2.mp4"></a>
<li>
<a href="/3.mp4"></a>
</li>

</ul>

因为我不能使用 soup.findAll("ul",class_="main").ul.a["href=True"]

我想要主类的输出

["/1.html","/2.html","/3.html"]

【问题讨论】:

  • 到目前为止,您尝试过什么(在代码中)?

标签: python web-scraping beautifulsoup


【解决方案1】:

您可以使用 CSS 选择器 .main a -> 这将在带有 class="main" 的标签下找到所有 &lt;a&gt; 标签:

print([a['href'] for a in soup.select('.main a')])

打印:

['/1.html', '/2.html', '/3.html']

【讨论】:

    【解决方案2】:

    在构建复杂表达式时,尝试对每一步的结果求值。

    当您需要单个元素时,使用方法find。当您需要元素的数组(列表)时,请使用 find_all。当您的表达式返回一个数组时,只需对其进行迭代!

    [e['href'] for e in soup.find('ul',{'class':'main'}).find_all('a')]
    

    【讨论】:

      【解决方案3】:

      试试这个:

      list1 = []
      for x in (soup_1.find_all('ul', class_ = "main" )):
          a = x.findChildren("a")
          for href in a:
              list1.append(href['href'])
      
      print(list1)
      

      【讨论】:

        【解决方案4】:

        另一种方法。

        from simplified_scrapy import SimplifiedDoc
        
        html = """
        <ul class="main">
        <li> 
        <a href="/1.html"></a>
        </li>
        <a href="/2.html"></a>
        <li>
        <a href="/3.html"></a>
        </li>
        
        </ul>
        
        <ul class="main2">
        <li> 
        <a href="/1.mp4"></a>
        </li>
        <a href="/2.mp4"></a>
        <li>
        <a href="/3.mp4"></a>
        </li>
        
        </ul>
        """
        doc = SimplifiedDoc(html)
        print (doc.selects('ul.main>a>href()'))
        # Or
        print (doc.select('ul.main').selects('a>href()'))
        

        结果:

        ['/1.html', '/2.html', '/3.html']
        

        【讨论】:

          猜你喜欢
          • 2021-03-27
          • 1970-01-01
          • 2016-01-13
          • 2016-10-07
          • 1970-01-01
          • 2013-07-15
          相关资源
          最近更新 更多