使用BeautifulSoup在一个父级中解析多个href

时间:2017-08-22 08:49:23

标签: python beautifulsoup screen-scraping

我的程序中有一行,使用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

我尝试将print行转换为for循环,方法是将find()更改为find_all(),然后在foor循环中使用.a['href']检索href。然而,无论我尝试什么,我总是只得到一个而不是五个。有关检索多个href的任何建议吗?看到find_all()返回一个数组,将find_all()直接放在a的父项之上是否有意义?

3 个答案:

答案 0 :(得分:1)

您想要做的事情如下:

cell = table.find('td', 'monsters')
for a_tag in cell.find_all('a'):
  print(a['href'])

答案 1 :(得分:1)

输入:

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

答案 2 :(得分:0)

完整代码,类似于上面的帖子

..