【问题标题】:Get first link in div using beautifulsoup Python使用 Beautifulsoup Python 获取 div 中的第一个链接
【发布时间】:2019-08-07 11:59:30
【问题描述】:

我正在尝试使用来自 HTML 的 beautifulsoup 获取此链接:

    <div id="downloads" style="text-align:left">
        Download as Excel tables:  
<a href="crispor.py?batchId=Kn3CuFPN9QbwruIqkBGk&download=guides&format=xls">Guides</a>

    <a href="crispor.py?batchId=Kn3CuFPN9QbwruIqkBGk&satMut=1">Saturating mutagenesis assistant</a><br>
            <small>Tab-sep format:  
    <a href="crispor.py?batchId=Kn3CuFPN9QbwruIqkBGk&download=guides&format=tsv">Guides</a>

我试过这段代码:

for link in soup.find_all('a', href=True, text='Guides'):
             crisporDL = link['href']

但这是输出上面的第二个链接,您可以看到两者都有文本“Guides”,我如何获得第一个链接?由于第一个链接返回 XLS 文件,而第二个链接返回 TSV 文件,我需要 xls 文件。

谢谢。

【问题讨论】:

    标签: python html web-scraping hyperlink beautifulsoup


    【解决方案1】:

    使用带有a标签选择器的id选择器传递给select_one。 select_one 返回第一个匹配项。它应该比使用 find 更快。

    soup.select_one("#downloads a")['href']
    

    【讨论】:

      【解决方案2】:

      我认为您正在寻找的是 find() 方法,它只返回第一个匹配项。

      crisporDL=soup.find('a', href=True, text='Guides')['href']
      

      在这种情况下,您不需要使用 for 循环。

      另一种无需对代码进行太多更改的可能性是将limit argument 添加到您的find_all()。

      soup.find_all('a', href=True, text='Guides',limit=1)
      

      虽然这里完全没有必要,但在某些情况下,您可能希望获得 前 n 个匹配项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-19
        • 1970-01-01
        • 2021-07-10
        • 1970-01-01
        • 2016-03-26
        • 1970-01-01
        • 2018-07-29
        • 2017-08-04
        相关资源
        最近更新 更多