繁体   English   中英

如何获取谷歌图片

[英]how to fetch google images

我想针对任何查询获取谷歌图片。 我已经浏览了谷歌图片搜索 api 但无法理解。 我也看到了一些方法,它们只获取第一页的图像。我使用了以下方法。

function getGoogleImg($k)
{
    $url = "http://images.google.it/images?as_q=##query##&hl=it&imgtbs=z&btnG=Cerca+con+Google&as_epq=&as_oq=&as_eq=&imgtype=&imgsz=m&imgw=&imgh=&imgar=&as_filetype=&imgc=&as_sitesearch=&as_rights=&safe=images&as_st=y";
    $web_page = file_get_contents( str_replace("##query##",urlencode($k), $url ));
    $tieni = stristr($web_page,"dyn.setResults(");
    $tieni = str_replace( "dyn.setResults(","", str_replace(stristr($tieni,");"),"",$tieni) );
    $tieni = str_replace("[]","",$tieni);
    $m = preg_split("/[\[\]]/",$tieni);
    $x = array();
    for($i=0;$i<count($m);$i++)
    {
        $m[$i] = str_replace("/imgres?imgurl\\x3d","",$m[$i]);
        $m[$i] = str_replace(stristr($m[$i],"\\x26imgrefurl"),"",$m[$i]);
        $m[$i] = preg_replace("/^\"/i","",$m[$i]);
        $m[$i] = preg_replace("/^,/i","",$m[$i]);
        if ($m[$i]!="")
        array_push($x,$m[$i]);
   }
   return $x;
}

此函数仅返回 21 个图像。 我想要针对此查询的所有图像。 我在 php 中这样做

可悲的是图像 API 正在关闭,所以我不建议转向那个,但我认为这将是一个更好的解决方案。

我最好的猜测是图像 22 和转发是使用某种 ajax/javascript 加载的(如果你搜索说标志并向下滚动,你会看到向下移动时加载的占位符)并且你需要传递页面通过 javascript 引擎,这不是我能找到的任何使用 php 的人(但)。 您是否检查过 $web_page 包含超过 21 张图片(当我玩弄谷歌图片搜索时,它使用 javascript 加载一些图片)? 当您从普通浏览器访问链接时会发生什么,如果关闭 javascript 会发生什么? 您的结果中是否有指向下一页的链接?

在现已弃用的 Image API 中,有一些方法可以限制每页的结果数量以及进入下一页的方法https://developers.google.com/image-search/v1/jsondevguide#json_snippets_php

如果您希望继续进行搜索并从搜索结果中获取图像,那么稍后http://simplehtmldom.sourceforge.net/可能是一个不错的选择。 它获取一个 html DOM 并允许您轻松找到节点并使其易于使用。 但它仍然使用 file_get_contents 或 curl 库来获取数据,因此它可能需要一些摆弄才能使 javascript 工作。

我写了一个脚本来从谷歌图像搜索下载图像,我目前正在下载 100 张原始图像

我在 stackoverflow answer 上写的原始脚本

Python - 从谷歌图片搜索下载图片?

我将详细解释我如何使用 urllib2 和 BeautifulSoup 从 Google 图片搜索中抓取原始图片的 url

例如,如果你想从谷歌图片搜索中抓取电影终结者 3 的图片

query= "Terminator 3"
query=  '+'.join(query.split())  #this will make the query terminator+3
url="https://www.google.co.in/search?q="+query+"&source=lnms&tbm=isch"
header={'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36"
}
req = urllib2.Request(url,headers=header)
soup= urllib2.urlopen(req)
soup = BeautifulSoup(soup)

上面的变量汤包含请求的页面的 html 代码,现在我们需要提取图像,您必须在浏览器中打开网页并检查图像上的元素

在这里你会找到包含 url 图像的标签

例如,对于谷歌图片,我发现“div”,{"class":"rg_meta"} 包含图像链接

您可以搜索 BeautifulSoup 文档

print soup.find_all("div",{"class":"rg_meta"})

你会得到一个结果列表

<div class="rg_meta">{"cl":3,"cr":3,"ct":12,"id":"C0s-rtOZqcJOvM:","isu":"emuparadise.me","itg":false,"ity":"jpg","oh":540,"ou":"http://199.101.98.242/media/images/66433-Terminator_3_The_Redemption-1.jpg","ow":960,"pt":"Terminator 3 The Redemption ISO \\u0026lt; GCN ISOs | Emuparadise","rid":"VJSwsesuO1s1UM","ru":"http://www.emuparadise.me/Nintendo_Gamecube_ISOs/Terminator_3_The_Redemption/66433","s":"Screenshot Thumbnail / Media File 1 for Terminator 3 The Redemption","th":168,"tu":"https://encrypted-tbn2.gstatic.com/images?q\\u003dtbn:ANd9GcRs8dp-ojc4BmP1PONsXlvscfIl58k9hpu6aWlGV_WwJ33A26jaIw","tw":300}</div>

上面的结果包含指向我们图片网址的链接

http://199.101.98.242/media/images/66433-Terminator_3_The_Redemption-1.jpg

您可以按如下方式提取这些链接和图像

ActualImages=[]# contains the link for Large original images, type of  image
for a in soup.find_all("div",{"class":"rg_meta"}):
    link , Type =json.loads(a.text)["ou"]  ,json.loads(a.text)["ity"]
    ActualImages.append((link,Type))

for i , (img , Type) in enumerate( ActualImages):
    try:
        req = urllib2.Request(img, headers={'User-Agent' : header})
        raw_img = urllib2.urlopen(req).read()
        if not os.path.exists(DIR):
            os.mkdir(DIR)
        cntr = len([i for i in os.listdir(DIR) if image_type in i]) + 1
        print cntr
        if len(Type)==0:
            f = open(DIR + image_type + "_"+ str(cntr)+".jpg", 'wb')
        else :
            f = open(DIR + image_type + "_"+ str(cntr)+"."+Type, 'wb')


        f.write(raw_img)
        f.close()
    except Exception as e:
        print "could not load : "+img
        print e

瞧,现在你可以使用这个脚本从谷歌搜索下载图像。 或者用于收集训练图像

对于完全工作的脚本,您可以在此处获取

https://gist.github.com/rishabhsixfeet/8ff479de9d19549d5c2d8bfc14af9b88

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM