python 小爬虫,爬取我要个性网的唯美图片
注:本文转载自 杨航锋的知乎问答。
#encoding:utf-8 #抓取整个网站的唯美图片 import re #导入re模块,正则表达式模块 import time import requests def get_html(url, headers): html = requests.get(url, timeout=100, headers=headers).text #.text转换为一个文本文件,利用timeout设置超时时间 #requests.get(url,params=None,**kwargs),其中params是一个字典,用来发送带参数的get请求,headers为请求头 return html #返回网页地址 def get_main_url(html): #获取主网页 #.*?.其中.表示匹配除空格意外的任意字符,*?表示重复前面的字符0到无限次,后边的.表示对.jpg的.的特殊转义,使其保留.jpg的格式 reg = (http://.*?.jpg) main_imglist = re.findall(reg, html)#正则表达式:re.findall(partten,string,flag=0)其中partten是正则表达式, #string是带匹配的字符串,flag是标志位,用来控制正则表达式的匹配方式 return main_imglist #返回带有图片的主网页地址列表 def get_son_url(html): #获取子网页,结果是返回所有含有图片地址的子网页 initurl = http://www.woyaogexing.com reg = re.compile(/tupian/weimei/d+/d+.html) son_urllist_init = re.findall(reg, html) son_urlist = set(son_urllist_init) son_url_final = [] for son_url in son_urlist: son_url_final.append(initurl + son_url) return son_url_final # 结果是所有含有图片的网页地址 ,到这里返回的是包含所有图片(包括子网页)中的网页地址列表 def get_all_sonurl(son_url_final, headers): son_imglist = [] for sonurl in son_url_final: son_html = requests.get(sonurl, timeout=100, headers=headers).text son_reg = re.compile(http://.*?.jpg) son_imglist1 = re.findall(son_reg, son_html) for temp in son_imglist1: son_imglist.append(temp) return son_imglist # 结果是所有子网页图片列表 def get_all_img(main_imglist, son_imglist, headers): global x # 使用全局变量使每次的变量不清除,这个问题有待完美解决! for imgurl in main_imglist: son_imglist.append(imgurl) for imgurl in son_imglist: with open(E:/Pic2/%s.jpg % x, wb) as file: file.write(requests.get(imgurl, timeout=100, headers=headers).content) #图片保存在E盘的Pic2文件夹下 time.sleep(0.1) x += 1 def turn_page(): page_list = [http://www.woyaogexing.com/tupian/weimei/index.html] for i in range(1, 7): page_list.append(http://www.woyaogexing.com/tupian/weimei/index_ + str(i) + .html) return page_list if __name__ == __main__: headers = { User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0, Accept: text/plain, */*; q=0.01, Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3, Accept-Encoding: gzip, deflate, Cookie: bdshare_firstime=1456041345958; Hm_lvt_a077b6b44aeefe3829d03416d9cb4ec3=1456041346; Hm_lpvt_a077b6b44aeefe3829d03416d9cb4ec3=1456048504, } #请求头 x = 0 page_list = [http://www.woyaogexing.com/tupian/weimei/index.html] for i in range(2, 20): page_list.append(http://www.woyaogexing.com/tupian/weimei/index_ + str(i) + .html) for p in range(6): html = get_html(page_list[p], headers) #返回各索引网页的响应内容 main_imglist = get_main_url(html)#得到主网页的图片网页地址列表 son_url_final = get_son_url(html)#得到最终的各子网页相应内容 son_imglist = get_all_sonurl(son_url_final, headers)#得到子网页的图片地址列表 get_all_img(main_imglist, son_imglist, headers)#得到所有主、子网页的图片