我正在写一个小的Python脚本来通过谷歌图像抓取图像.我已经设法把事情搞定到了我想要的图像的网址在一个方便的列表中.现在,我只需抓住它们......
对于每个图像网址,我这样做:
print("Retrieving:{0}".format(sFinalImageURL))
sExt = sFinalImageURL.split('.')[-1]
#u = urllib.request.urlopen(sFinalImageURL)
try:
u = urllib.request.urlopen(sFinalImageURL)
except:
print("error: cannot retrieve image")
continue
raw_data = u.read()
print("read {0} bytes".format(len(raw_data)))
u.close()
global sImagesFolder
try:
f = open("{0}/{1}_{2}.{3}".format(sImagesFolder,sImage,i,sExt),'wb')
f.write(raw_data)
f.close()
except:
print("couldn't write to {0}/{1}_{2}.{3}".format(sImagesFolder,sImage,i,sExt))
print()
Run Code Online (Sandbox Code Playgroud)
以下是我遇到的问题:
尽管我可以在浏览器中直接打开URL,但尝试打开一些URL会给我403.所以在HTTP请求标题中有一些图像服务器不喜欢的东西......任何想法?
这是一些输出:
Retrieving:http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Timba%2B1.jpg/220px-Timba%2B1.jpg
error: cannot retrieve image
Retrieving:http://upload.wikimedia.org/wikipedia/commons/thumb/2/26/YellowLabradorLooking_new.jpg/260px-YellowLabradorLooking_new.jpg
error: cannot retrieve image
Retrieving:http://1.bp.blogspot.com/-7SsJ1n3RdoA/Tf07NOgD5nI/AAAAAAAAABo/tl8qLLIU01Y/s1600/english-shepherd-dog-0003.jpg
read 11123 bytes
Retrieving:http://completedogfood.net/wp-content/uploads/2010/07/complete-dog-food.bmp
read 419630 bytes
Run Code Online (Sandbox Code Playgroud)
维基百科似乎只允许访问真正的浏览器.
这个问题可以通过指定User-Agent真实浏览器的字符串来解决,因为Python 默认urllib发送类似的东西Python-urllib/3.2.
这是一个有效的示例(使用User-Agent我使用的浏览器的字符串):
url = 'http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Timba%2B1.jpg/220px-Timba%2B1.jpg'
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/12.04 Chromium/18.0.1025.168 Chrome/18.0.1025.168 Safari/535.19'
u = urllib.request.urlopen(urllib.request.Request(url, headers={'User-Agent': user_agent}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4622 次 |
| 最近记录: |