陌染___007 2021-03-06 19:08 采纳率: 25%
浏览 137
已采纳

python抓取图片无法正常显示

# —*- codeing = utf-8 -*-
# @Time : 2021/3/2 21:39
# @File :04自制.py
# @Software : PyCharm
import os
import requests
import re

if __name__ == "__main__" :
    # 创建一个文件夹,予以保存图片
    if not os.path.exists('./122'):
        os.mkdir('./123')
    # 1、指定url
    url = 'https://www.qiushibaike.com/imgrank/'
    # UA伪装:将user-Agent封装到一个字典中
    headers = {
        'user-agent' :'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.81 '
    }
    # 对指定uil发起请求
    # 对整张页面进行爬取
    page_text = requests.get(url=url, headers=headers).text
    # 利用聚焦爬虫对所有图片进行爬取
    ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
    imj_src_list = re.findall(ex, page_text, re.S)
    # print(imj_src_list)
    for src in imj_src_list :
        # 拼接出一个完整的图片url
        src = 'https' + src
        # 请求到图片二进制数据
        img_data = requests.get(url=url, headers=headers).content
        # 上传图片名称
        img_name = src.split('/')[-1]
        # 图片储存路径
        imgPath = './123/' + img_name
        with open(imgPath, "wb") as fp :
            fp.write(img_data)
            print(img_data, '下载成功!!!')
  • 写回答

1条回答 默认 最新

  • ProfSnail 2021-03-06 19:32
    关注
    import os
    import requests
    import re
    import time
    import random
     
    if __name__ == "__main__" :
        # 创建一个文件夹,予以保存图片
        if not os.path.exists('./123'):
            os.mkdir('./123')
        # 1、指定url
        url = 'https://www.qiushibaike.com/imgrank/'
        # UA伪装:将user-Agent封装到一个字典中
        headers = {
            'user-agent' :'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.81 '
        }
        user_agent_list = ["Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
                        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
                        "Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/61.0",
                        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
                        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
                        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
                        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
                        "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15",
                        ]
        # 对指定uil发起请求
        # 对整张页面进行爬取
        page_text = requests.get(url=url, headers=headers).text
        # 利用聚焦爬虫对所有图片进行爬取
        ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
        imj_src_list = re.findall(ex, page_text, re.S)
        # print(imj_src_list)
        retryLimit = 5
        for src in imj_src_list :
            # 拼接出一个完整的图片url
            src = 'http:' + src
            # 请求到图片二进制数据
            flag = True
            retryTime = 0
            while flag:
                try:
                    headers['User-Agent'] = random.choice(user_agent_list)
                    img_data = requests.get(url=src, headers=headers).content
                    # 上传图片名称
                    img_name = src.split('/')[-1]
                    # 图片储存路径
                    imgPath = './123/' + img_name
                    with open(imgPath, "wb") as fp :
                        fp.write(img_data)
                        print(src)
                        print(imgPath, '下载成功!!!')
                    flag = False
                except:
                    print("访问被拒绝,尝试等待后重连")
                    time.sleep(5)
                retryTime += 1
                if retryTime >= retryLimit:
                    print(src)
                    print(imgPath, "下载失败")
                    break
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥500 高有偿提问!求优化设计微信小程序
  • ¥15 matlab在安装时报错 无法找到入口 无法定位程序输入点
  • ¥15 收益高的广告联盟有哪些
  • ¥15 Android Studio webview 的使用问题, 播放器横屏全屏
  • ¥15 删掉jdk后重新下载,Java web所需要的eclipse无法使用
  • ¥15 uniapp正式环境中通过webapi将本地数据推送到设备出现的跨域问题
  • ¥15 xui建立节点,显示错误
  • ¥15 关于#单片机#的问题:开始、复位、十进制的功能可以实现,但是切换八进制的功能无法实现(按下按键也没有效果),把初始状态调成八进制,也是八进制可以实现但是切换到十进制不行(相关搜索:汇编语言|计数器)
  • ¥15 VINS-Mono或Fusion中feature_manager中estimated_depth是特征的深度还是逆深度?
  • ¥15 谷歌浏览器如何备份抖音网页数据