我正在使用bs4
并希望提取指定图片的href
。
例如,我有html代码:
<div style="text-align:center;"><a href="page/folder1/image.jpg" target="_blank"><img src="page_files/image.jpg" alt="Picture" border="0" width="150" height="150"></a></div>
</div>
我的图片src
已被提供(page_files/image.jpg
),并希望提取相应的href
,因此在此示例中为:page/folder1/image.jpg
。我试图使用find_previous method
,但我有一个小问题来提取href
内容:
soup = bs4.BeautifulSoup(page)
for img in soup('img'):
imgLink = img.find_previous("a")
这将返回整个标记:
<a href="Here_is_link"><img alt="Tumblr" border="0" src="Here_is_source"/></a>
但我无法接受href
内容,因为当我尝试制作时:
imgLink = img.find_previous("a")['href']
我有错误。
同样的事情是当我尝试使用find_parent
之类的
imgLink = img.find_parent("a")['href']
我该如何解决?还有什么更好:find_previous()
或find_parent()
?
答案 0 :(得分:3)
确保您仅寻找具有<a>
属性href
父标记的图片:
for img in soup.select('a[href] img'):
link = img.find_parent('a', href=True)
print link['href']
CSS selector仅选择具有<a href="...">
父标记并具有href
属性的图像。然后,find_parent()
搜索会再次将搜索范围限制为具有属性设置的标记。
如果您要搜索所有图片,可能会发现一些标记为<a>
的父标记或前标记不具有href
属性;例如,<a>
标记也可用于<a name="...">
的链接目标。如果您收到NoneType
属性错误,则只是意味着给定<img>
标记没有此类父标记。