Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从网页中获取相关图像_Python_Html Parsing_Beautifulsoup_Jsoup_Facebook Opengraph - Fatal编程技术网

Python 从网页中获取相关图像

Python 从网页中获取相关图像,python,html-parsing,beautifulsoup,jsoup,facebook-opengraph,Python,Html Parsing,Beautifulsoup,Jsoup,Facebook Opengraph,用户输入一个查询,我需要获取与该查询相关的网页,一旦检索到该网页,我需要从该网页获取重要图像 一种方法可能是按照facebook的方式,获取在opengraphprotocolimage标签中定义的图像,但问题是目前没有多少网站符合OGP,因此大多数时候没有图像返回 第二种方法可能是根据每个图像的大小、纵横比e.t.c(正如在SO的一个问题中所讨论的)为其分配分数,但由于一些限制,目前我无法采用这种方法 我考虑的第三种方法是查看图像的标题是否包含查询中的任何单词,如果包含,那么我可以得到该图像。

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

一种方法可能是按照facebook的方式,获取在
opengraphprotocol
image标签中定义的图像,但问题是目前没有多少网站符合OGP,因此大多数时候没有图像返回

第二种方法可能是根据每个图像的大小、纵横比e.t.c(正如在SO的一个问题中所讨论的)为其分配分数,但由于一些限制,目前我无法采用这种方法

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

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


你对如何解决这个问题有更好的想法吗?非常感谢您的帮助。

我不了解开放图协议,因此我将给出关于第二种和第三种方法的意见

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

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

第三种方法:

我要说的是,很难定义“图片的标题”。您可以使用
img
标记的
alt
属性作为标题。如果标题与
img
分开,那么它可以是任何内容。。包裹在一个div、span等中。在这种情况下,您可以使用一些模糊匹配来假设图片周围的文本将与图片相关。您可以找到
img
parent
标记,并获取该
parent
标记中的所有文本。如果它仍然不能很好地工作,您可以向上搜索一级。如果你对你的目标网站有一些了解,这将非常有帮助。如果不是,这可能是一个很好的起点

这是一段代码,向您展示了抓取图像及其周围文本的想法:

import urllib2
from bs4 import BeautifulSoup

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
soup = BeautifulSoup(opener.open("http://www.r-bloggers.com/"))
imgs = soup.find_all("img")
captions = [img.parent.parent.text.encode('utf-8').strip() for img in imgs]
for img, caption in zip(imgs, captions):
    print img, caption
这是我的父母。父母。。。您可能希望将其更改为合法级别以满足您的要求