python3破解ajax 实现抓取百度靓照并循环下载在本地(三)

一、项目简介

1. 内容:键盘输入需要查找的图片的关键字及下载的页数,代码实现对图片的搜索以及对图片的下载。

              这里以抓取鞠婧祎的图片为例子

2. 百度图片官网

3. 难点:百度搜图片发现网页不是静态网页,而是采取ajax渲染的动态网页,因而需要对ajax进行处理

4. 软件:pycharm

5. python3

6. 涉及的类库:requests

二、思路

1.使用requests库对网页进行请求

2.分析网页代码得到图片的位置

3. 观察json数据

     翻页我们发现关键字出现在 ‘ queryWord ’ 、'word' 中

    并且,每次翻页我们会发现 ‘pn’  会呈 30、60、90.....的增长,即每页增长30

三、代码

# python
# -*- coding:utf-8 -*-
# author:Only time:2019/9/4

import requests


def get_url_datas(name, number):
    datas = []  # 存放破解ajax的data
    for data in range(30, 30*number+30, 30):
        datas.append({
                'tn': 'resultjson_com',
                'ipn': 'rj',
                'ct': 201326592,
                'is': '',
                'fp': 'result',
                'queryWord': name,
                'cl': 2,
                'lm': -1,
                'ie': 'utf-8',
                'oe': 'utf-8',
                'adpicid': '',
                'st': -1,
                'z': '',
                'ic': 0,
                'hd': '',
                'latest': '',
                'copyright': '',
                'word': name,
                's': '',
                'se': '',
                'tab': '',
                'width': '',
                'height': '',
                'face': 0,
                'istype': 2,
                'qc': '',
                'nc': 1,
                'fr': '',
                'expermode': '',
                'force': '',
                'pn': data,
                'rn': 30,
                'gsm': '1e',
                '1567408686187': ''
                })
    url = 'https://image.baidu.com/search/acjson'  # 百度图片的首页
    header = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    url_datas = []  # 存放含有图片地址的数据
    for data in datas:
        # 获取 json数据 解析 得到'data'的数据
        get_data = requests.get(url, data, headers= header).json().get('data')
        url_datas.append(get_data)
    return url_datas


def get_imgurl(url_datas):
    imgurls = []  # 存放图片的url地址
    for lists in url_datas:
        for list in lists:
            imgurl = list.get('thumbURL')
            if imgurl != None:
                imgurls.append(imgurl)
            else:
                print('None')
    print(len(imgurls))
    return imgurls


def save_img(imgurls):
    number = 1
    for imgurl in imgurls:
        img = requests.get(imgurl).content  # 图片的二进制模式
        with open("图片_鞠婧祎/"+str(number)+".jpg", 'wb') as f:
            f.write(img)
        print("第"+str(number)+"张图片保存成功!")
        number += 1
    print('\n')
    print("保存图片成功")


if __name__ == "__main__":
    name = input("请输入要搜索的明星照片:")
    number = int(input("请输入要下载的页数:"))
    url_datas = get_url_datas(name, number)  # 搜索鞠婧祎  并下载图片
    imgurls = get_imgurl(url_datas)
    save_img(imgurls)

四、运行效果

发布了22 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43930694/article/details/100556009