【问题标题】:Python: extract the href surrounding imagePython:提取href周围的图像
【发布时间】:2014-09-19 12:36:37
【问题描述】:

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

imgLink = img.find_parent("a")['href']

我该如何解决这个问题?还有什么更好:find_previous()find_parent()

【问题讨论】:

  • 你得到什么错误?您的img.find_parent('a') 应该正常工作。也许不是所有的图片都包含在相同的&lt;a&gt; 标签中?
  • @MartijnPieters 我想你误解了我的问题。 `img.find_parent('a')` 工作正常,但它返回:&lt;a href="Here_is_link"&gt;&lt;img alt="Tumblr" border="0" src="Here_is_source"/&gt;&lt;/a&gt; 但我只想提取href 内容,所以这里是:Here_is_link。而imgLink = img.find_parent("a")['href'] 行返回错误:TypeError: 'NoneType' object has no attribute '__getitem__'
  • 这是因为您正在为 所有 图像执行此操作,其中一些图像没有 具有 &lt;a&gt; 标记父级。然后,find_parent() 搜索将返回 None

标签: python python-2.7 beautifulsoup


【解决方案1】:

确保您在寻找具有&lt;a&gt; 父标记和href 属性的图像:

for img in soup.select('a[href] img'):
    link = img.find_parent('a', href=True)
    print link['href']

CSS selector 仅选择具有&lt;a href="..."&gt; 父标记带有href 属性的图像。然后find_parent() 搜索再次将搜索限制为那些具有属性集的标签。

如果您正在搜索所有图像,您很可能会找到一些具有&lt;a&gt; 标签父标签或前面标签但没有href 属性的标签;例如,&lt;a&gt; 标记也可用于带有&lt;a name="..."&gt; 的链接目标。如果您收到 NoneType 属性错误,这仅仅意味着 对于给定的 &lt;img&gt; 标记没有这样的父标记

【讨论】:

  • @ 现在我知道是什么问题了,我没有注意有些图像没有 &lt;a&gt; 父标签。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-08-30
  • 2011-08-22
  • 2023-01-27
  • 2017-02-07
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
相关资源
最近更新 更多