我有下面的汤:
<a href="some_url">next</a>
<span class="class">...</span>
我想从中提取href some_url
如果我只有一个标签,我可以这样做,但这里有两个标签。我也可以得到文本“next”,但这不是我想要的。
另外,是否有一个很好的API描述和示例。我正在使用标准文档,但我正在寻找一些更有组织的东西。
我有下面的汤:
<a href="some_url">next</a>
<span class="class">...</span>
我想从中提取href some_url
如果我只有一个标签,我可以这样做,但这里有两个标签。我也可以得到文本“next”,但这不是我想要的。
另外,是否有一个很好的API描述和示例。我正在使用标准文档,但我正在寻找一些更有组织的东西。
当前回答
你可以使用find_all以如下方式找到所有具有href属性的元素,并打印它们:
# Python2
from BeautifulSoup import BeautifulSoup
html = '''<a href="some_url">next</a>
<span class="class"><a href="another_url">later</a></span>'''
soup = BeautifulSoup(html)
for a in soup.find_all('a', href=True):
print "Found the URL:", a['href']
# The output would be:
# Found the URL: some_url
# Found the URL: another_url
# Python3
from bs4 import BeautifulSoup
html = '''<a href="https://some_url.com">next</a>
<span class="class">
<a href="https://some_other_url.com">another_url</a></span>'''
soup = BeautifulSoup(html)
for a in soup.find_all('a', href=True):
print("Found the URL:", a['href'])
# The output would be:
# Found the URL: https://some_url.com
# Found the URL: https://some_other_url.com
注意,如果您使用的是较老版本的BeautifulSoup(在版本4之前),则此方法的名称为findAll。在版本4中,BeautifulSoup的方法名已更改为与PEP 8兼容,因此您应该使用find_all。
如果你想让所有标签都带有href,你可以省略name参数:
href_tags = soup.find_all(href=True)
其他回答
你可以使用find_all以如下方式找到所有具有href属性的元素,并打印它们:
# Python2
from BeautifulSoup import BeautifulSoup
html = '''<a href="some_url">next</a>
<span class="class"><a href="another_url">later</a></span>'''
soup = BeautifulSoup(html)
for a in soup.find_all('a', href=True):
print "Found the URL:", a['href']
# The output would be:
# Found the URL: some_url
# Found the URL: another_url
# Python3
from bs4 import BeautifulSoup
html = '''<a href="https://some_url.com">next</a>
<span class="class">
<a href="https://some_other_url.com">another_url</a></span>'''
soup = BeautifulSoup(html)
for a in soup.find_all('a', href=True):
print("Found the URL:", a['href'])
# The output would be:
# Found the URL: https://some_url.com
# Found the URL: https://some_other_url.com
注意,如果您使用的是较老版本的BeautifulSoup(在版本4之前),则此方法的名称为findAll。在版本4中,BeautifulSoup的方法名已更改为与PEP 8兼容,因此您应该使用find_all。
如果你想让所有标签都带有href,你可以省略name参数:
href_tags = soup.find_all(href=True)