python学习笔记---爬取百度图片

我的博客仅仅是为了记录学习python的学习过程和成长,不对任何文章的技术负责(^_^)

需求:爬取百度图片

项目分析:百度中的图片属于动态加载的,不能用request获取网页源码进行匹配。经过尝试,我发现于其用selenium去模拟爬取,还有一个更简单的方法

看,动态加载的,难搞,但是有一个更好的办法,


看,我找到了json数据,可以直接对其进行请求,不需要使用selenium了,计划通

实现

首先导包

import requests
import json

设置一下headers和params

headers = {
 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
param = {
 'tn': 'resultjson_com',
 'logid': '11450117138517082972',
 'ipn': 'rj',
 'ct': '201326592',
 'is': '',
 'fp': 'result',
 'fr': '',
 'word': '速涂',
 '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': '',
 'expermode': '',
 'nojc': '',
 'isAsync': '',
 'pn': '90',
 'rn': '30',
 'gsm': '5a',
 '1673751010721': '',
}

数据请求和解析函数

def parse(url):
 response = requests.get(url=url, headers=headers, params=param).json()
 img_list = response['data']
 for img in img_list:
 try:
 img_name = img['fromPageTitle']
 print(img_name)
 img_url = img['replaceUrl'][0]['ObjUrl']
 print(img_url)
 except:
 pass
为了对多个网页进行解析,我们需要创建一个url列表



看这两张图片的对比,只有pn产生了变化,很明显我们可以猜测它的全称是page_num,s所以我们只需要对它进行操作就可以得到不同的数据

url_list = []
for i in range(90, 301, 30):
 url = 'https://image.baidu.com/search/acjson?tn=resultjson_com' \
 '&logid=11450117138517082972&ipn=rj&ct=201326592&is=&fp=result' \
 '&fr=&word=%E9%80%9F%E6%B6%82&queryWord=%E9%80%9F%E6%B6%82' \
 '&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=&expermode=&nojc=&isAsync=' \
 '&pn={}&rn=30&gsm=5a&1673751010721='.format(i)
 url_list.append(url)

最后,调用函数就可以了

if __name__ == '__main__':
 for url in url_list:
 parse(url=url)
作者:落月原文地址:https://segmentfault.com/a/1190000043345075

%s 个评论

要回复文章请先登录注册