Python: 提取包围图像的href
我正在使用 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
方法,但在提取 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()
哪个更好呢?
1 个回答
4
确保你只在寻找那些有标签作为父标签并且带有href属性的图片:
for img in soup.select('a[href] img'):
link = img.find_parent('a', href=True)
print link['href']
这个CSS选择器只会挑选出那些有标签作为父标签并且带有href属性的图片。接下来的find_parent()
搜索又进一步限制了搜索范围,只找那些确实有这个属性的标签。
如果你在寻找所有的图片,可能会发现一些图片的父标签是标签,但这些标签并没有href属性;标签也可以用作链接目标,比如。如果你遇到NoneType
属性错误,那只是说明给定的标签没有这样的父标签。