找到具有beautifulsoup的具体链接

时间:2011-10-11 21:23:58

标签: python regex beautifulsoup

嗨,我无法弄清楚如何找到以某些文字开头的链接。 findall('a')工作得很好,但是太过分了。我只想列出所有以之为开头的链接 http://www.nhl.com/ice/boxscore.htm?id=

任何人都可以帮助我吗?

非常感谢

3 个答案:

答案 0 :(得分:12)

首先设置一个测试文档并使用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>

接下来,我们可以搜索所有<a>个标签,其href属性以http://www.nhl.com/ice/boxscore.htm?id=开头。您可以使用正则表达式:

>>> 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>]

答案 1 :(得分:2)

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

{{1}}

答案 2 :(得分:0)

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

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

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