python 爬取图片下载在本地

需要python环境,然后复制下面的代码

需要下载拓展:pip install hashlib 和 fake_useragent

运行
python3 pyimg.py

 

import json
import os.path
from hashlib import sha1
import requests
from fake_useragent import UserAgent

class BaiduPchongImg:

    def __init__(self) -> None:
        self.param = "?tn=resultjson_com&logid=11037441803473987554&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E5%9B%BE%E7%89%87&queryWord=%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&expermode=&nojc=&isAsync=&pn={}&rn=30&gsm=5a&1687744811367="
        self.url = "https://image.baidu.com/search/acjson"
        self.header = {
            'User-Agent' : UserAgent().random
        }

    #加密图片文件名
    def sha1(self,href):
        s = sha1()
        s.update(href.encode())
        return s.hexdigest()

    #获取链接的json数据然后循环赋值给下载的函数
    def _html(self,url):
        
        content = requests.get(url,headers=self.header).text #获取url路径文本内容
        
        img_json = json.loads(content)#解析返回dirt
        
        for href in img_json['data']:
            try:
                img_href = href['thumbURL']
                # print(href)
                self.img_info(img_href)#读取到图片的路径然后解析里内容写入文件里
            except KeyError:
                pass
                
    #下载图片在本地
    def img_info(self,href):
        
        img_content = requests.get(href,headers=self.header).content#读取图片内容
        
        file_name = self.sha1(href) #加密文件名

        file = "D:\学习\项目\python项目\pachong\img\\" #下载到指定路径
        
        file_url = file+file_name+".jpg" #绝对的文件路径

        #验证是否存在文件夹,不存在就创建
        if not os.path.exists(file):
            os.mkdir(file)

        #保存图片
        with open(file_url,'wb') as f:
            f.write(img_content)
            #with 打开文件之后执行完自动执行close函数,所有不需要手动关闭
            print(file_url)
    
    def _url(self,num):
        if num>0:
            #默认是30条,一次30张,输入几就是30*i,比如30*3就是90条
            i = num*30
            url = self.url+self.param.format(i)
            self._html(url)

if __name__ == '__main__' :
    #print(UserAgent().random)
    #pass
    #exit()
    baidu = BaiduPchongImg()
    baidu._url(1)

 

posted @ 2023-06-26 15:33  亚索会代码  阅读(37)  评论(0编辑  收藏  举报