我有下面的汤:

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