python爬虫之爬取动态加载的图片_百度

运行坏境

python3.xhtml

选择目标——百度

当咱们在使用右键查看网页源码时,出来的倒是一大堆JavaScript代码,并无图片的连接等信息python

由于它是一个动态页面嘛。它的网页原始数据实际上是没有这个图片的,经过运行JavaScript,把这个图片数据把它插入到网页的html标签里面json

那这样形成的结果是,咱们在开发者工具中虽然能看到这个html标签,但实际上,当咱们在看网页的原始数据的时候,实际上是没有这个标签的,它只在运行时加载和渲染python3.x

进行抓包就行了,咱们点击Network–XHR,而后咱们在往下滑动滚动条时,会一直出现一个名为:acjson?tn=resultjson&ipn=…的请求,点击它再点Preview,咱们看到这是一条json数据,点开data,咱们看到这里面有30条数据,每一条都对应着一张图片。app

以下:工具

 

 

因而咱们就清楚了,百度图片一开始只加载30张图片,当咱们往下滑动滚动条时,页面会动态加载json数据,每条json数据里面包含了30条信息,信息里面又包含了图片的URL,JavaScript会将这些url解析并显示出来。这样,每次滚动到底就又多出30张图片。url

那么,这些一直出现的json数据有什么规律呢?spa

咱们点击Headers,而后对比这些json数据的头部信息。code

经过对比,咱们发现headers下的Query String Parameters中的字段大多保持不变,只有pn字段保持以30为步长递增htm

比较

总结

import requestsimport osdef getManyPages(keyword,pages):    params=[]    for i in range(30,30*pages+30,30):        params.append({                      'tn': 'resultjson_com',                      'ipn': 'rj',                      'ct': 201326592,                      'is': '',                      'fp': 'result',                      'queryWord': keyword,                      'cl': 2,                      'lm': -1,                      'ie': 'utf-8',                      'oe': 'utf-8',                      'adpicid': '',                      'st': -1,                      'z': '',                      'ic': 0,                      'word': keyword,                      's': '',                      'se': '',                      'tab': '',                      'width': '',                      'height': '',                      'face': 0,                      'istype': 2,                      'qc': '',                      'nc': 1,                      'fr': '',                      'pn': i,                      'rn': 30,                      'gsm': '1e',                      '1488942260214': ''                  })    url = 'https://image.baidu.com/search/acjson'    urls = []    for i in params:        urls.append(requests.get(url,params=i).json().get('data'))    return urlsdef getImg(dataList, localPath):    if not os.path.exists(localPath):  # 新建文件夹        os.mkdir(localPath)    x = 0    for list in dataList:        for i in list:            if i.get('thumbURL') != None:                print('正在下载:%s' % i.get('thumbURL'))                ir = requests.get(i.get('thumbURL'))                open(localPath + '%d.jpg' % x, 'wb').write(ir.content)                x += 1            else:                print('图片连接不存在')if __name__ == '__main__':    dataList = getManyPages('风景',10)  # 参数1:关键字,参数2:要下载的页数    getImg(dataList,'*********') # 参数2:指定保存的路径
相关文章
相关标签/搜索