第一步,先获取网页源码。这是用以下网址为例:
url = "https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%D4%FA%BF%CB%CB%B9%CD%BC%C6%AC&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=111111"
Python网络请求的类在urllib中,我们这次只需要用request。发出请求,获取响应:
#从urllib中导入requestfrom from urllib import requestimport urllib
#发出请求response = request.urlopen(url)
#读取响应里面的东西,这时候text就是网页源码了text = response.read()
第二步,写出正则表达式。这个就不赘述了。网上很多讲解。这里说一下,Python中正则的操作在re库中。从源码中获取所有url
#调用re的compile,传入正则表达式,获取操作字符串的对象。pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
#调用re的findall()方法,传入一个正则对象和编码格式。就可以根据创建pattern时的正则表达式,获取text#中的所有符合要求的字符串urls = re.findall(pattern, text.decode('utf-8'))
这里urls就是url列表了
第三步就是区分出图片,然后下载下来:
#用于给图片命名index = 0
#循环列表for i in urls: #不同图片后缀不同,区分一下 if i.endswith('.png'):
#这里使用两个参数的open,传入文件名,和文件权限(二进制写入) img = open('img' + str(index) + '.png', 'wb')
#通过urls中的网址发送请求 req = urllib.request.urlopen(i) #读取文件流 buf = req.read() #把流写入img文件对象中 img.write(buf)
这里就判断了png,其它图片也一样。就不写了。
代码在这,左边是下载好的图片。