美组:如何选择某个标签

2024-10-02 20:39:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我很困惑,当你想给一个孩子做螃蟹时,汤是多么的美味。 所以,我有下面的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?

谢谢你。


Tags: 代码namedivsrchttpimg孩子标签
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'

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(),它返回一个标记对象;循环给您子对象,因此ximg对象。我把它改得更直接更清晰。x现在是div,我们直接导航到第一个a,并包含img标记。

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

相关问题 更多 >