我是网络抓初学者。 我首先引用https://www.youtube.com/watch?v=ZAUNEEtzsrg下载带有特定标记的图片(例如cat),它有效! 但是我遇到了只能下载大约100张图像的新问题,这个问题好像只加载第一页html并且不加载所有的“ajax”。因此,似乎我们必须模拟向下滚动以下载下一个或更多100张图像。
我的代码:https://drive.google.com/file/d/0Bwjk-LKe_AohNk9CNXVQbGRxMHc/edit?usp=sharing
总而言之,问题如下:
如何通过python中的源代码下载谷歌图片搜索中的所有图片(请给我一些例子:))
我必须知道任何网络抓取技术吗?
答案 0 :(得分:1)
我的最终解决方案是使用icrawler。
from icrawler.examples import GoogleImageCrawler
google_crawler = GoogleImageCrawler('your_image_dir')
google_crawler.crawl(keyword='sunny', offset=0, max_num=1000,
date_min=None, date_max=None, feeder_thr_num=1,
parser_thr_num=1, downloader_thr_num=4,
min_size=(200,200), max_size=None)
该框架包含5个内置爬虫(google,bing,baidu,flicker和general crawl)的优点,但它仍然只能在谷歌抓取时提供100个图像。
答案 1 :(得分:0)
使用Google API获取结果,因此请使用以下内容替换您的网址:
https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=cat&rsz=8&start=0
您将获得8个结果,然后再次使用start = 7调用该服务以获得下一个结果 等等,直到你收到错误。
返回的数据采用JSON格式。
这是我在网上找到的一个Python示例:
import urllib2
import simplejson
url = ('https://ajax.googleapis.com/ajax/services/search/images?' +
'v=1.0&q=barack%20obama&userip=INSERT-USER-IP')
request = urllib2.Request(url, None, {'Referer': /* Enter the URL of your site here */})
response = urllib2.urlopen(request)
# Process the JSON string.
results = simplejson.load(response)
# now have some fun with the results...
至于网页报废技术,有这个页面: http://jakeaustwick.me/python-web-scraping-resource
希望它有所帮助。
答案 2 :(得分:0)
要获得100个结果,请尝试以下操作:
from urllib import FancyURLopener
import re
import posixpath
import urlparse
class MyOpener(FancyURLopener, object):
version = "Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"
myopener = MyOpener()
page = myopener.open('https://www.google.pt/search?q=love&biw=1600&bih=727&source=lnms&tbm=isch&sa=X&tbs=isz:l&tbm=isch')
html = page.read()
for match in re.finditer(r'<a href="http://www\.google\.pt/imgres\?imgurl=(.*?)&imgrefurl', html, re.IGNORECASE | re.DOTALL | re.MULTILINE):
path = urlparse.urlsplit(match.group(1)).path
filename = posixpath.basename(path)
myopener.retrieve(match.group(1), filename)
我可以调整biw=1600&bih=727
来获取更大或更小的图像。
答案 3 :(得分:0)
对于有关icrawler的任何问题,您可以在Github上提出问题,这可能会得到更快的响应。
Google搜索结果的数量限制似乎是1000.解决方法是定义如下日期范围。
from datetime import date
from icrawler.builtin import GoogleImageCrawler
google_crawler = GoogleImageCrawler(
parser_threads=2,
downloader_threads=4,
storage={'root_dir': 'your_image_dir'})
google_crawler.crawl(
keyword='sunny',
max_num=1000,
date_min=date(2014, 1, 1),
date_max=date(2015, 1, 1))
google_crawler.crawl(
keyword='sunny',
max_num=1000,
date_min=date(2015, 1, 1),
date_max=date(2016, 1, 1))