百度动图爬虫

'''百度图片搜索动图一开始并没有异步请求,直接往下滑找json数据每一个的data[0]里没有type: "gif",说明动图在data[1:]里每一个的data里有 replaceUrl, 同样replaceUrl[0]里也没有动图在replaceUrl[1]里如果看链接说明不是动图,即这个请求是不对的
其实百度的图片链接都是加js加密了的,在objURL里
'''
json.loads

strict=False 可以忽略格式不正确的json数据.忽略不规范的json错误

timeout=2 设置超时时间为2秒

import requests
import json
import re
import os# 实现百度图片地址解析
'''
这个加密是把key对应着链接里的字符换成value
'''
def parse_url(url):b = {'w': "a",'k': "b",'v': "c",'1': "d",'j': "e",'u': "f",'2': "g",'i': "h",'t': "i",'3': "j",'h': "k",'s': "l",'4': "m",'g': "n",'5': "o",'r': "p",'q': "q",'6': "r",'f': "s",'p': "t",'7': "u",'e': "v",'o': "w",'8': "1",'d': "2",'n': "3",'9': "4",'c': "5",'m': "6",'0': "7",'b': "8",'l': "9",'a': "0"}a = {'_z2C$q': ":","_z&e3B": ".",'AzdH3F': "/"}for key,value in a.items():url = url.replace(key,value)c = ''for u in url:if u in b.keys():u = b[u]c += ureturn c# 输入搜索关键字
key_word = input('请输入你要下载的关键字:')file_dir = f'{os.getcwd()}/img/{key_word}'
if not os.path.exists(file_dir):os.makedirs(file_dir)# 用来保存图片的变量,如1.jpg,2.jpg    
k = 1
for i in range(3):res = requests.get(f'http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord={key_word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&word={key_word}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={i*30}&rn=30&gsm=78&1587639331703=')# 单引号换为双引号data = re.sub(r"[']", '"', res.text)# 将json数据转为python数据,strict=False忽略不正确的json格式data = json.loads(data, strict=False)['data'][:-1]for j in data:objURL = j.get('objURL')objURL = parse_url(objURL)print(objURL)headers = { # 求情图片对reserer字段进行了验证'reserer': 'https://www.baidu.com'}try:resimg = requests.get(objURL, headers=headers, timeout=2)with open(f'{file_dir}/{k}.gif', 'wb') as fb:fb.write(resimg.content)k += 1except:pass


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部