Python:提取href周围的图像

时间:2014-07-28 10:30:41

标签: python python-2.7 beautifulsoup

我正在使用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()

1 个答案:

答案 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>标记没有此类父标记