程序是爬百度图片搜索范冰冰的所有图片。Notepad已经选择了UTF8编码,URL地址也没有回车分行。
直接上代码如下:
import urllib.request
import re
import sys
import os
import urllib
import ssl
#根据给定的网址来获取网页详细信息,得到的html就是网页的源代码
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('utf-8')
def getImg(html):
imglist = re.findall('"ObjURL":"(.*?)",', html, re.S)#表示在整个网页中过滤出所有图片的地址,放在imglist中
x = 0
path = 'D:\test'
# 将图片保存到D:\test文件夹中,如果没有test文件夹则创建
if not os.path.isdir(path):
os.makedirs(path)
paths = path+'\' #保存在test路径下
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'D:\\test\\%s.jpg' % x) #打开imglist中保存的图片网址,并下载图片保存在本地,format格式化字符串
x = x + 1
return imglist
url="http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E8%8C%83%E5%86%B0%E5%86%B0"
html=getHtml(url)
print (getImg(html)) #从网页源代码中分析并下载保存图片
看下这个:https://segmentfault.com/q/1010000011103319
感谢楼上回复。问题仍然没有解决,我很奇怪的是,前些天还可以正常运行,今天就不行了。您可以运行这个脚本吗?
1.使用'"ObjURL":"查找的图片地址很多都是无效的,所以会urlopen error no host given出错;
2.图片网站有反爬机制,需要添加headers头,亲测以下代码可运行:
import os
import re
import requests
import urllib
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('utf-8')
def getImg(html):
imglist = re.findall('"thumbURL":"(.*?)",', html, re.S)#表示在整个网页中过滤出所有图片的地址,放在imglist中
x = 0
path = 'D:\test\\'
#
# # 将图片保存到D:\test文件夹中,如果没有test文件夹则创建
if not os.path.isdir(path):
os.makedirs(path)
path = path+'\\' #保存在test路径下
headers={
'Referer':'http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E8%8C%83%E5%86%B0%E5%86%B0',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
}
s=requests.session()
s.headers.update(headers)
for imgurl in imglist:
#urllib.request.urlretrieve(imgurl,'D:\\test\\%s.jpg' % x) #打开imglist中保存的图片网址,并下载图片保存在本地,format格式化字符串
x = x + 1
img=s.get(url=imgurl)
print(img)
with open(path+'%s.jpg' % x, 'wb') as file:
file.write(img.content)
return imglist
url="http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E8%8C%83%E5%86%B0%E5%86%B0"
html=getHtml(url)
print (getImg(html)) #从网页源代码中分析并下载保存图片
如果答案对你有帮助,麻烦采纳下!!!