查找带有 beautifulsoup 的特定链接

Posted

技术标签:

【中文标题】查找带有 beautifulsoup 的特定链接【英文标题】:Find specific link w/ beautifulsoup 【发布时间】:2011-12-05 16:05:47 【问题描述】:

嗨,我无法弄清楚如何在我的一生中找到以某些文本开头的链接。 findall('a') 工作正常,但它太多了。我只想列出所有以开头的链接 http://www.nhl.com/ice/boxscore.htm?id=

谁能帮帮我?

非常感谢

【问题讨论】:

【参考方案1】:

首先建立一个测试文档并用 BeautifulSoup 打开解析器:

>>> from BeautifulSoup import BeautifulSoup
>>> doc = '<html><body><div><a href="something">yep</a></div><div><a href="http://www.nhl.com/ice/boxscore.htm?id=3">somelink</a></div><a href="http://www.nhl.com/ice/boxscore.htm?id=7">another</a></body></html>'
>>> soup = BeautifulSoup(doc)
>>> print soup.prettify()
<html>
 <body>
  <div>
   <a href="something">
    yep
   </a>
  </div>
  <div>
   <a href="http://www.nhl.com/ice/boxscore.htm?id=3">
    somelink
   </a>
  </div>
  <a href="http://www.nhl.com/ice/boxscore.htm?id=7">
   another
  </a>
 </body>
</html>

接下来,我们可以搜索所有具有href 属性以http://www.nhl.com/ice/boxscore.htm?id= 开头的&lt;a&gt; 标签。你可以使用正则表达式:

>>> import re
>>> soup.findAll('a', href=re.compile('^http://www.nhl.com/ice/boxscore.htm\?id='))
[<a href="http://www.nhl.com/ice/boxscore.htm?id=3">somelink</a>, <a href="http://www.nhl.com/ice/boxscore.htm?id=7">another</a>]

【讨论】:

哇,谢谢。我猜beautifulsoup 文档以流利的正则表达式为前提。谢谢你让我看到 @JenScott 如果这回答了你的问题,你应该接受它。 很好,但是如果你的属性名叫做“class”呢? 只需使用:kwargs='class':foo 然后soup.findAll('a', **kwargs) 刚刚发现我们可以用class_来引用class***.com/questions/13794532/…【参考方案2】:

您可能不需要 BeautifulSoup,因为您的搜索是特定的

>>> import re
>>> links = re.findall("http:\/\/www\.nhl\.com\/ice\/boxscore\.htm\?id=.+", str(doc))

【讨论】:

【参考方案3】:

您可以找到所有链接,然后过滤该列表以仅获取您需要的链接。这将是非常快速的解决方案,无论您事后过滤它。

listOfAllLinks = soup.findAll('a')
listOfLinksINeed = []

for link in listOfAllLinks:
    if "www.nhl.com" in link:
        listOfLinksINeed.append(link['href'])

【讨论】:

以上是关于查找带有 beautifulsoup 的特定链接的主要内容,如果未能解决你的问题,请参考以下文章

使用 BeautifulSoup 查找与特定关键字相关的链接

在 python BeautifulSoup 上获取带有特定前缀的超链接

使用 BeautifulSoup 查找网页上的特定文本

使用 BeautifulSoup 查找具有两种特定样式的标签

BeautifulSoup/Regex:从 href 中查找特定值

使用 BeautifulSoup 查找包含特定文本的 HTML 标签