python 小爬虫,爬取我要个性网的唯美图片

注:本文转载自https://www.zhihu.com/people/zhi-mu-qing-yang/answers 杨航锋的知乎问答。

#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)#得到所有主、子网页的图片




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值