requests库下载图片

7 篇文章 0 订阅
3 篇文章 0 订阅
import requests
from urllib import parse
import traceback
import re
import os

class DownloadImg:

    def __init__(self):
        self.img_name = input('请输入需要下载的图片关键字:')
        self.url_bing = 'https://www.bing.com/images/async?q={}&first={}&count=35&relp=35&tsc=ImageBasicHover&datsrc=I&layout=RowBased&mmasync=1&dgState='
        self.url_baidu = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=11110430524814747612&ipn=rj&ct=201326592&is=&fp=result&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&word={}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
        }

    def get_baiduimg(self):
        # global baiduimg_urllist
        try:
            i = 0
            while True:
                num = i*30
                baidu_url = self.url_baidu.format(parse.quote(self.img_name),parse.quote(self.img_name),num)
                req = requests.get(url=baidu_url,headers=self.headers)
                baiduimg_urllist = re.findall(r'thumbURL":"(https:.*?jpg)"', req.text)

                # 如果获取没有对应的图片url,返回的列表为空,说明已经获取了所有的图片地址,这时就跳出循环
                if not baiduimg_urllist:
                    break

                for img_url in baiduimg_urllist:
                    req_img = requests.get(url=img_url, headers=self.headers)
                    img_data = req_img.content

                    # 创建目录
                    if not os.path.exists('爬图/{}/'.format(self.img_name)):
                        os.makedirs('爬图/{}/'.format(self.img_name))

                    img_path = '爬图/{}/'.format(self.img_name) + 'baidu' + img_url[-35:-15].replace(',','') + '.jpg'

                    with open(img_path,'wb') as f:
                        f.write(img_data)
                i += 1

        except Exception as e:
            # print(f'异常:%s'%e)
            # print(baiduimg_urllist)
            print('爬图完成')

    def get_bingimg(self):
        # global bingimg_urllist
        try:
            i = 0
            while True:
                num = i * 30
                bing_url = self.url_bing.format(parse.quote(self.img_name),num)
                req = requests.get(url=bing_url, headers=self.headers)
                bingimg_urllist = re.findall(r'src="(https:.*?pid=1.7)" alt=',req.text)

                if not bingimg_urllist:
                    break

                for img_url in bingimg_urllist:
                    req_img = requests.get(url=img_url, headers=self.headers)
                    img_data = req_img.content

                    if not os.path.exists('爬图/{}/'.format(self.img_name)):
                        os.makedirs('爬图/{}/'.format(self.img_name))

                    img_path = '爬图/{}/'.format(self.img_name) + 'bing' + img_url[34:50] + '.jpg'

                    with open(img_path, 'wb') as f:
                        f.write(img_data)
                i += 1

        except Exception as e:
            # print('异常:'.format(e))
            # print(f'详细异常:%s' % traceback.format_exc())  
            # print(bingimg_urllist)
            print('爬图完成')

if __name__ == '__main__':

    img = DownloadImg()
    img.get_bingimg()
    img.get_baiduimg()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值