微专业 基础篇:Python网络爬虫基础原理 Ajax百度图片下载器

import requests
from urllib import parse
import uuid
import os
def download_img(img_url):
	#新建一个文件夹存储图片
	if not os.path.exists('img'):
		os.mkdir('img')
	img=requests.get(img_url,headers=headers,stream=True) #获取数据流
	if img: #判断img是否为空,有时候code200也不一定是有内容的
		with open('img/{}.jpg'.format(uuid.uuid4()),'wb') as f:
			chunks=img.iter_content(chunk_size=128)
			#防止CPU压力过大
			for chunk in chunks:
				f.write(chunk)
	'''
	当下载大的文件的时候,建议使用strea模式.
	默认情况下是false,他会立即开始下载文件并存放到内存当中,倘若文件过大就会导致内存不足的情况.
	当把get函数的stream参数设置成True时,它不会立即开始下载,当你使用iter_content或iter_lines
	遍历内容或访问内容属性时才开始下载。需要注意一点:文件没有下载之前,它也需要保持连接。
	转载至:https://www.cnblogs.com/nul1/p/9172068.html
	'''
def get_json(search_word,number):
	
	url='https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&' \
	    'queryWord={0:}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0' \
	    '&hd=&latest=&copyright=&word={0:}&s=&se=&tab=&width=&height=&face=0&' \
	    'istype=2&qc=&nc=1&fr=&expermode=&force=&pn={1:}&rn=30&gsm=1e&1586245023192='.format(search_word,number)
	#对于url分析在Word和queryWord内的内容为转码内容可以用parse内的quote进行转码
	html=requests.get(url,headers=headers).json()['data']
	#获取json内容
	try:
		for img in html:
			img_url=img['middleURL']
			#获取图片地址传给下载器
			download_img(img_url)
	except:
		pass
if __name__ == '__main__':
	headers = {
		'Connection': 'keep-alive',
		'Cookie': 'BIDUPSID=48E2DA4C7FAEF38154147CE188547C90; PSTM=1585356178; BAIDUID=48E2DA4C7FAEF38115106A9F5FF76160:FG=1; H_PS_PSSID=30969_1467_31170_21110_31186_31217_30823_31163_31196; delPer=0; PSINO=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDRCVFR[X_XKQks0S63]=mk3SLVN4HKm; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; firstShowTip=1; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
		'Referer': 'https://image.baidu.com/'
	}
	search_word=parse.quote(input('请输入要下载的图片'))
	for number in range(30,300,30):
		get_json(search_word,number)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值