• spider_爬取斗图啦所有表情包(图片保存)


    """
    爬取斗图吧里面的所有表情包

    知识点总结:
    一、使用requests库进行爬取,随机请求头(网站反爬措施少。挂个请求头足矣)

    二、具体思路:
    1.先爬取所有的图片url,放在列表里
    2.循环遍历url请求这些图片,
    3.将图片进行分类保存
    三、分类保存用到一个知识点,endwith(以***结尾)
    使用这个函数,将jpg,gif,png等不同类型的图片分开
    四、演示案例中,只爬取了前20页。
    五、各个定义的数字变量意思为:
    n=1 网页页数
    num=1 保存图片数

    注:该案例主要是练习
        1.图片的保存,应注意,保存时使用字节流的形式。
        2.书写爬虫代码的逻辑思维。
    """
    from fake_useragent import FakeUserAgent
    import requests
    import re
    import time
    import random
    def getUrls():
    # 将获取到的url列表在放到list这个列表里
    url_list=[]
    n=1
    while True:
    url = f"http://www.doutula.com/article/list/?page={n}"
    headers = {
    "User-Agent":FakeUserAgent().random
    }
    htmlStr = requests.get(url,headers=headers).text
    # print(htmlStr)

    # 定义 提取图片url的正则
    urls = r'data-original="(.*?)"'
    # 编译
    urls = re.compile(urls)
    #正则提取
    urls = re.findall(urls,htmlStr)
    url_list.append(urls)
    print("正在收集第%s页的图片"%n)
    n = n + 1
    # 设置延时
    time.sleep(0.5)
    # 当n=21的时候,爬虫程序停止.为了演示方便只保存前二十页其实共有615页
    if n == 21:
    break
    print(len(url_list))
    return url_list


    # 保存图片
    # 以字节的形式将图片保存
    def download(url_list):
    num = 1
    for urls in url_list:
    for url in urls:
    header={
    "User-Agent":FakeUserAgent().random
    }
    # 因为爬取到的图片有两种,所以写了一个判断条件,分类保存,
    if url.endswith('.jpg'):
    # 保存到本地
    with open('./img/%s.jpg'%num,'wb') as file:
    # 获取到图片 字节
    img = requests.get(url, headers=header)
    file.write(img.content)
    print("正在保存第%s张图片"%num)
    num += 1
    time.sleep(0.3)
    elif url.endswith('.gif'):
    # 保存到本地
    with open('./img/%s.gif' % num, 'wb') as file:
    # 获取到图片 字节
    img = requests.get(url, headers=header)
    file.write(img.content)
    print("正在保存第%s张图片" % num)
    num += 1
    time.sleep(0.3)

    if __name__ == '__main__':
    url_list=getUrls()
    download(url_list)
    人生苦短,我用python!
  • 相关阅读:
    vim可以打开,gvim无法打开
    Ubuntu用apt-get安装时依赖包无法安装
    如何用mm、mmm编译android中的模块
    装饰模式简单的代码
    FileWriter和FileReader简单使用
    TCP/IP、Http、Socket的区别--特别仔细
    surface实例-小球弹起事例
    android中图片的三级缓存cache策略(内存/文件/网络)
    接口回调
    大公司的Java面试题集
  • 原文地址:https://www.cnblogs.com/YangQingHong/p/11006257.html
Copyright © 2020-2023  润新知