当你想螃蟹一个标签的孩子时,我很困惑汤的美妙效果。 所以,我有以下HTML代码
<div class="media item avatar profile">
<a href="http://..." class="media-link action-medialink">
<img class="media-item-img" src="http://...jpeg" alt="name" title="name" width="150" height="200">
</a>
</div>
我想抓住src标签。我使用以下代码:
soup = BeautifulSoup(file_)
for x in soup.find('div', attrs={'class':'media item avatar profile'}).findNext('img'):
print x
这会打印整个img标签。我如何只选择src?
谢谢。
答案 0 :(得分:4)
src
是attribute of the tag。获得标记后,像访问字典键一样访问属性;您只找到了a
代码,因此您还需要导航到包含的img
代码:
for x in soup.find_all('div', attrs={'class':'media item avatar profile'}):
print x.a.img['src']
您使用的代码findNext()
会返回标记对象;循环遍历为您提供子项,因此x
是img
对象。我改变了这一点,使其更直接,更清晰。 x
现在是div
,我们直接导航到第一个a
并包含img
标记。
答案 1 :(得分:3)
我想你会想要这样的东西:
soup.find('div', attrs={'class':'media item avatar profile'}).a.img['src']
In [1]: from bs4 import BeautifulSoup
In [2]: html = """\
...: <div class="media item avatar profile">
...: <a href="http://..." class="media-link action-medialink">
...: <img class="media-item-img" src="http://...jpeg" alt="name" title="name" width="150" height="200">
...: </a>
...: </div>"""
In [3]: soup = BeautifulSoup(html)
In [4]: soup.find('div', attrs={'class':'media item avatar profile'}).a.img['src']
Out[4]: 'http://...jpeg'
答案 2 :(得分:0)
findNext
返回与给定条件匹配的第一个项目,并显示在文档中的给定标记之后。请注意,这意味着它返回的任何代码都不能保证是给定代码的子(例如div
代码的子代。)
使用findChildren
限制给定标记的子级:
import BeautifulSoup as bs
file_ = '''<html>
<div class="media item avatar profile">
<a href="http://..." class="media-link action-medialink">
<img class="media-item-img" src="http://...jpeg" alt="name" title="name" width="150" height="200">
</a>
</div>
</html>
'''
soup = bs.BeautifulSoup(file_)
for x in soup.find(
'div', attrs={'class':'media item avatar profile'}).findChildren('img'):
print(x['src'])
产量
http://...jpeg