嗨,我无法弄清楚如何找到以某些文字开头的链接。 findall('a')工作得很好,但是太过分了。我只想列出所有以之为开头的链接 http://www.nhl.com/ice/boxscore.htm?id=
任何人都可以帮助我吗?
非常感谢
答案 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'])