python爬虫-百度图片批量下载

import requests
import os
from urllib.parse import quote
from tqdm import tqdm

print('***百度图片下载***')
keyword = input("输入想要下载的图片的关键字吧>>>")
paginator = int(input("每页30张图片,你想要几页呢→→→"))
while paginator<=0:
    print('页数输入错误,重新输入哦 亲😀>>>')
    paginator = int(input("每页30张图片,你想要几页呢→→→"))
url = 'http://image.baidu.com/search/acjson?'
headers = {
            'User-Agent': 'Mozilla/5.0',
            'Referer': 'http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1557124645631_R&pv=&ic=&nc=1&z=&hd=1&latest=0&copyright=0&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word={}'.format(quote(keyword))
}

params = []
for i in range(1, paginator + 1):
    params.append(
        'tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=1&latest=0&copyright=0&word={}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=star&pn={}&rn=30&gsm=78&1557125391211='.format(
            quote(keyword), quote(keyword), 30 * i))
urls = []
for param in params:
    urls.append(url + param)

image_url = []
for url in urls:
    html = requests.get(url, headers=headers).json()
    json_data = html['data']
    # print(json_data)
    for i in json_data:
        if i:
            image_url.append(i['thumbURL'])
        # print(image_url)

print('百度图片正在搜索图片信息...')
cwd = os.getcwd()
file_name = os.path.join(cwd, keyword)
if not os.path.exists(keyword):
    os.mkdir(file_name)
for index, url in enumerate(image_url, start=1):
    with open(file_name + '\\{}.jpg'.format(index), 'wb') as f:
        f.write(requests.get(url).content)
    if index != 0 and index % 30 == 0:
        for i in tqdm(range(int(10e6)),ncols=88,desc='{}第{}页正在下载'.format(keyword, index // 30)):
            pass

print('"{}" 图片已经下载完成,去 {}产看一下吧(*^_^*)'.format(keyword,file_name))
# 总结1:百度图片网站属于异步加载 直接network选项卡找XHR 然后看url参数主要有哪些变化
# 总结2:根据参数变化可以做迭代循环 将参数和url合并成一个url列表 然后循环请求 从合法json数据中找出图片url
# 总结3:enumerate用法可以将索引和循环的内容都列出来 方便使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值