爬虫进阶-python爬虫爬取百度图片

 今天来和大家分享下,如何通过爬虫,爬取百度图片,并下载保存到本地。

一、开发环境
开发环境:python 3.9和sublime_text
二、第三方库
requests

os

(time)

三、步骤

步骤1:导入requests模块

步骤2:添加url

步骤3:查看百度图片时,浏览器用到Ajax请求,所以url是变化的

步骤4:get请求url,包括url、headers、请求数据。

步骤5:创建新文件夹接收响应

四、代码

只能一次爬取前30张,因为没改params['pn']。

如果想爬取更多的话就for循环,请求Ajax:

#包括Ajax的url
urls=[]
for i in range(30,30+30*num):
    params['pn']=i
    res=requests.get(url=url,headers=headers,params=params)
    urls.append(res)

 

然后遍历urls列表,请求得到urls中每个值的json数据,最后得到所有图片的url,请求这些保存到文件夹。

import requests
import os
def getPages():#只能得到30张图片,想得到更多图片,需要变化params['pn']的值。
    headers={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77"}
    url='https://image.baidu.com/search/acjson'
    #追加请求内容(负载)
    params={
        'tn':'resultjson_com',
        'logid':'5336511566462226640',
        'ipn':'rj',
        'ct':'201326592',
        'is':' ',
        'fp':'result',
        'fr':' ',
        'word':'荷兰猪',
        'cg':'girl',
        'queryWord':'荷兰猪',
        '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':'30',
        'rn':'30',
        'gsm':'1e',
        '1660570401395':' '
        }    
    res=requests.get(url=url,headers=headers,params=params)
    # print(res.json())
    data=res.json()['data']
    # print(data)
    #得到所有图片地址
    urlPages=[]
    for i in data:
        if i.get('thumbURL') !=None:          
            urlPages.append(i['thumbURL'])
    # print(urlPages)   
    #检测文件夹是否存在
    dir='./baidu'
    if not os.path.exists(dir):
        os.mkdir(dir)#创建目录方法
    #向每个图片url发起请求
    x=0
    for o in urlPages:
        print('下载成功')
        res=requests.get(url=o,headers=headers)
        #下载到dir文件夹
        open(f'{dir}/{x}.jpg','wb').write(res.content)
        x+=1
getPages()

 

 

 
posted @ 2022-08-24 17:10  豚豚三斤  阅读(1443)  评论(0)    收藏  举报