从网页获取相关图片

时间:2013-12-03 12:22:27

标签: python html-parsing beautifulsoup jsoup open-graph-protocol

用户输入查询,我需要获取与该查询相关的网页,一旦检索到网页,我需要从该网页获取重要图像。

一种方法可能是获取Open Graph Protocol图像标签中定义的图像,就像facebook所做的那样,但问题是目前没有多少网站符合OGP,因此大多数时候没有图像归还。

第二种方法可能是根据其大小,纵横比e.t.c为每个图像分配分数(如SO中的一个问题所述),但由于某些限制,我暂时无法遵循该方法。

我想到的第三种方法是查看图像的标题是否包含查询中的任何单词,如果是,那么我可以获得该图像。 没有多少图片包含字幕,但至少我可以获得有标题的图片。

我面临的问题是如何确定图片是否有标题?目前我是通过BeautifulSoup库获取图像元素,然后我检查下一个元素。如果下一个元素包含文本,如果文本包含来自查询的单词,我会得到图像。 但很多时候都会错过许多字幕,很多时候都会检索到非字幕文字。

您对如何解决问题有更好的了解吗?任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

我不了解开放式图形协议,因此我将就第二种和第三种方法发表意见。

第二种方法: 在将图像返回给用户之前,确实需要进行一些检查。它不一定非常复杂,但想象有一张图片实际上非常小,基本上不包含任何信息。在某种程度上,它不是合格的图片,许多用于装饰目的的图片将属于这一类。点击here获取示例。

使用BeautifulSoup可以轻松获得高度或宽度,并获得有关图像的更多信息,您可以使用Selenium获取图片的location和其他功能,以帮助您验证图片的质量。

第三种方法:

我会说很难定义“图片的标题”。您可以使用alt标记的img属性作为标题。如果标题与img分开,那么它可以是任何东西..包裹在div,span,...等等。在这种情况下,你可以使用一些模糊匹配来ASSUME图片周围的文字将与图片相关。您可以找到parent的{​​{1}}标记,并获取该img标记内的所有文字。如果它仍然无法正常工作,您可以搜索一个级别。如果您对目标网站有所了解,将会非常有用。如果不是这可能是一个很好的起点。

这段代码向您展示了抓取图片及其周围文字的想法:

parent

在这里,我抓住了parent.parent ......您可能希望将其更改为合法级别以满足您的要求。