Python批量下载小姐姐图片(含完整代码)


大家好,我是 👉 【Python当打之年】

本期我们利用 python脚本实现批量下载图片

希望对小伙伴们有所帮助,如有疑问或者需要改进的地方可以私信小编。



🏳️‍🌈 1.网页分析

打开网页直接搜索 ❤️‘小姐姐’,选择图片:

F12或者右键审查元素,多滚动几页,可以看到以下信息:

顺序:Network→XHR→Search

在这里插入图片描述
以前三页URL为例:

https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E5%B0%8F%E5%A7%90%E5%A7%90&queryWord=%E5%B0%8F%E5%A7%90%E5%A7%90&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn=30&rn=30&gsm=1e&1655090591300=

https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E5%B0%8F%E5%A7%90%E5%A7%90&queryWord=%E5%B0%8F%E5%A7%90%E5%A7%90&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn=60&rn=30&gsm=3c&1655090591410=

https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E5%B0%8F%E5%A7%90%E5%A7%90&queryWord=%E5%B0%8F%E5%A7%90%E5%A7%90&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn=90&rn=30&gsm=5a&1655090595073=

主要关注参数:pn、word、queryWord,可以看到:
pn:pn:30 、 pn:60 、 pn:90、…,实际上,pn表示一页包含30个图片。
word:%E5%B0%8F%E5%A7%90%E5%A7%90
在线解码工具:http://www.jsons.cn/urlencode
在这里插入图片描述

🏳️‍🌈 2. 新建文件夹用于存放爬取结果

def make_dirs(self):
    if not os.path.exists(self.keyWord):
        os.makedirs(self.keyWord)

🏳️‍🌈 3. 获取每页图片

def get_onepage_info(self,page):
   url = f'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word={self.keyWord}&queryWord={self.keyWord}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn={(page+1)*30}&rn=30&gsm=1e&1655091195245='
   r = requests.get(url, headers=self.headers)  
   json_data = json.loads(r.text)

   for num in range(30):
       img_url = jsonInfo['data'][num]['thumbURL']
       img_title = jsonInfo['data'][num]['fromPageTitleEnc'].replace(':','').replace('?','')
       print(img_url)
       try:    
           res = requests.get(img_url, headers=self.headers)
           if res.status_code == 200:
               with open(f'./{self.keyWord}/{img_title}.png', "wb") as f:
                   f.write(res.content)
           print(f'第{page+1}页,第{num+1}张爬取完成')
       except:
           continue

结果:

在这里插入图片描述

🏳️‍🌈 4 获取所有页图片

def get_pages_info(self):
    for page in range(self.pages):
        self.get_onepage_info(page)

结果:

在这里插入图片描述

❤️❤️❤️ 5 封装类(全部代码)

class BaiduImage():
    def __init__(self,keyWord,headers,pages):
        self.keyWord = keyWord
        self.headers = headers
        self.pages = pages

    def make_dirs(self):
        if not os.path.exists(self.keyWord):
            os.makedirs(self.keyWord)

    def get_onepage_info(self,page):
        url = f'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word={self.keyWord}&queryWord={self.keyWord}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn={(page+1)*30}&rn=30&gsm=1e&1655091195245='
        r = requests.get(url, headers=self.headers)  
        json_data = json.loads(r.text)

        for num in range(30):
            img_url = jsonInfo['data'][num]['thumbURL']
            img_title = jsonInfo['data'][num]['fromPageTitleEnc'].replace(':','').replace('?','')
            print(img_url)
            try:    
                res = requests.get(img_url, headers=self.headers)
                if res.status_code == 200:
                    with open(f'./{self.keyWord}/{img_title}.png', "wb") as f:
                        f.write(res.content)
                print(f'第{page+1}页,第{num+1}张爬取完成')
            except:
                continue

    def get_pages_info(self):
        for page in range(self.pages):
            self.get_onepage_info(page)
    
if __name__ == '__main__':
    keyWord = '小姐姐'
    pages = 1
    headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
    }
    bd = BaiduImage(keyWord, headers, pages)
    bd.make_dirs()
    bd.get_pages_info()

以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享注明出处)让更多人知道。

推荐阅读


文章首发微信公众号 “Python当打之年” ,每天都有python编程技巧推送,希望大家可以喜欢
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python当打之年

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值