zoukankan      html  css  js  c++  java
  • Python批量爬取网站图片

     

    1.需要用到的库有: 

          Requests    re    os    time 如果没有安装的请自己安装一下,pycharm中打开终端输入命令就可以安装

      

        2.IDE : pycharm

        3.python 版本: 3.8.1

    2.爬取地址:

    https://www.vmgirls.com/9384.html

    -------------------废话不多说了,不懂的可以给我留言哦,接下来我们一步一步来操作------------------

    1.请求网页

    1 # 请求网页
    2 import requests
    3 
    4 response=requests.get('https://www.vmgirls.com/9384.html')
    5 
    6 print(response.text)

      执行结果:

     发现请求到的是403,直接禁止了我们访问,requests库会告诉他我们是python过来的,他知道我们是一个python禁止我们反爬

     解决:

      我们可以伪装头,把头设置一下

    # 请求网页
    import requests
    
    headers={
           'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'
    }
    response=requests.get('https://www.vmgirls.com/9384.html',headers=headers)
    
    print(response.request.headers)

    执行结果:

      这样头就伪装了

    2.解析网页

    # 请求网页
    import requests
    import re
    
    headers={
           'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'
    }
    response=requests.get('https://www.vmgirls.com/9384.html',headers=headers)
    
    # print(response.request.headers)
    # print(response.text)
    html=response.text
    #解析网页
    urls=re.findall('<img alt=".*?" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" width=".*?" height=".*?" class="alignnone size-full" data-src="(.*?)" data-nclazyload="true">',html)
    print(urls);

     结果:

     可能对re.findall后面不太理解怎么来的,关键就是要找到图片的dom然后根据re库的一个匹配规则来匹配,要匹配的用(.*?)来表示,不需要匹配的用.*?来代替就可以了,

    打开网址,按f12查看源码找到图片的代码

     

     复制图片代码,打开网页源码按 ctrl+f 进行搜索,找到图片源码的位置

    3.保存图片

      具体可以看源码,我给这些图片创建了一个文件夹(需要os库),并且命了名,这样分类下次看小姐姐就比较容易找到啦

    # 请求网页
    import time
    import requests
    import re
    import  os
    headers={
           'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'
    }
    response=requests.get('https://www.vmgirls.com/9384.html',headers=headers)
    
    # print(response.request.headers)
    # print(response.text)
    html=response.text
    
    # 解析网页
    # 目录名字
    dir_name=re.findall('<img alt="(.*?)" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" width=".*?" height=".*?" class="alignnone size-full" data-src=".*?" data-nclazyload="true">',html)[-1]
    if not os.path.exists(dir_name):
        os.mkdir(dir_name)
    urls=re.findall('<img alt=".*?" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" width=".*?" height=".*?" class="alignnone size-full" data-src="(.*?)" data-nclazyload="true">',html)
    print(urls);
    
    # 保存图片
    for url in urls:
        # 加个延时,避免给服务器造成压力
        time.sleep(1)
        # 图片的名字
        file_name=url.split('/')[-1]
        response = requests.get(url, headers=headers)
        with open(dir_name+'/'+file_name,'wb') as f:
            f.write(response.content)
  • 相关阅读:
    idea系列---【测试一段代码执行时间,每次都得复制粘贴,idea如何设置自定义模板代码?】
    我爱java系列---【java8时间类Instant】
    我爱java系列---【Java比较浮点数的正确方式】
    idea系列---【idea常用快捷键大全】
    linux系列---【linux系统如何创建一个软/硬连接?】
    vue系列---【vue项目如何使用element-ui的弹框提示?】
    vue系列---【vue项目中element-ui如何实现在登陆之前进行预校验?校验通过才允许调后台接口】
    vue系列---【vue项目中element-ui如何实现点击重置按钮,重置表单数据?】
    vue系列---【element-ui如何给表单添加参数验证?】
    面对对象的随笔
  • 原文地址:https://www.cnblogs.com/jxnc/p/12335689.html
Copyright © 2011-2022 走看看