使用 BeautifulSoup 解析一个父项中的多个 href
Parse multiple href within one parent using BeautifulSoup
我的程序中有一行,使用 BeautifulSoup 的 find():
print(table.find('td','monsters'))
这是上面一行的输出:
<td class="monsters">
<a href="/m154"><div class="mim mim-154"></div></a>
<a href="/m153"><div class="mim mim-153"></div></a>
<a href="/m152"><div class="mim mim-152"></div></a>
<a href="/m155"><div class="mim mim-155"></div></a>
<a href="/m147"><div class="mim mim-147"></div></a>
</td>
现在我想解析所有五个 href,以便它输出如下内容:
/m154
/m153
/m152
/m155
/m147
我试图通过将 find()
更改为 find_all()
将我的 print
行转换为 for 循环,然后通过在 foor 中使用 .a['href']
检索 href环形。然而,无论我尝试什么,我总是只能获得一个条目而不是五个。检索多个 href 有什么建议吗?看到 find_all()
returns 一个数组,将 find_all() 直接放在 a
的父级之上是否有意义?
你想要做的是类似下面的事情:
cell = table.find('td', 'monsters')
for a_tag in cell.find_all('a'):
print(a['href'])
输入:
page = """<td class="monsters">
<a href="/m154"><div class="mim mim-154"></div></a>
<a href="/m153"><div class="mim mim-153"></div></a>
<a href="/m152"><div class="mim mim-152"></div></a>
<a href="/m155"><div class="mim mim-155"></div></a>
<a href="/m147"><div class="mim mim-147"></div></a>
</td>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(page, "html.parser") # your source page parsed as html
links = soup.find_all('a', href=True) # get all links having href attribute
for i in links:
print(i['href'])
结果:
/m154
/m153
/m152
/m155
/m147
完整代码,类似于上面的帖子
import bs4
HTML= """<html>
<table>
<tr>
<td class="monsters">
<a href="/m154"><div class="mim mim-154"></div></a>
<a href="/m153"><div class="mim mim-153"></div></a>
<a href="/m152"><div class="mim mim-152"></div></a>
<a href="/m155"><div class="mim mim-155"></div></a>
<a href="/m147"><div class="mim mim-147"></div></a>
</td>
</tr>
</table>
</html>
"""
table = bs4.BeautifulSoup(HTML, 'lxml')
anker = table.find('td', 'monsters').find_all('a')
[print(a['href']) for a in anker]
我的程序中有一行,使用 BeautifulSoup 的 find():
print(table.find('td','monsters'))
这是上面一行的输出:
<td class="monsters">
<a href="/m154"><div class="mim mim-154"></div></a>
<a href="/m153"><div class="mim mim-153"></div></a>
<a href="/m152"><div class="mim mim-152"></div></a>
<a href="/m155"><div class="mim mim-155"></div></a>
<a href="/m147"><div class="mim mim-147"></div></a>
</td>
现在我想解析所有五个 href,以便它输出如下内容:
/m154
/m153
/m152
/m155
/m147
我试图通过将 find()
更改为 find_all()
将我的 print
行转换为 for 循环,然后通过在 foor 中使用 .a['href']
检索 href环形。然而,无论我尝试什么,我总是只能获得一个条目而不是五个。检索多个 href 有什么建议吗?看到 find_all()
returns 一个数组,将 find_all() 直接放在 a
的父级之上是否有意义?
你想要做的是类似下面的事情:
cell = table.find('td', 'monsters')
for a_tag in cell.find_all('a'):
print(a['href'])
输入:
page = """<td class="monsters">
<a href="/m154"><div class="mim mim-154"></div></a>
<a href="/m153"><div class="mim mim-153"></div></a>
<a href="/m152"><div class="mim mim-152"></div></a>
<a href="/m155"><div class="mim mim-155"></div></a>
<a href="/m147"><div class="mim mim-147"></div></a>
</td>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(page, "html.parser") # your source page parsed as html
links = soup.find_all('a', href=True) # get all links having href attribute
for i in links:
print(i['href'])
结果:
/m154
/m153
/m152
/m155
/m147
完整代码,类似于上面的帖子
import bs4
HTML= """<html>
<table>
<tr>
<td class="monsters">
<a href="/m154"><div class="mim mim-154"></div></a>
<a href="/m153"><div class="mim mim-153"></div></a>
<a href="/m152"><div class="mim mim-152"></div></a>
<a href="/m155"><div class="mim mim-155"></div></a>
<a href="/m147"><div class="mim mim-147"></div></a>
</td>
</tr>
</table>
</html>
"""
table = bs4.BeautifulSoup(HTML, 'lxml')
anker = table.find('td', 'monsters').find_all('a')
[print(a['href']) for a in anker]