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

运行坏境

python3.x

选择目标——百度

当我们在使用右键查看网页源码时,出来的却是一大堆JavaScript代码,并没有图片的链接等信息

因为它是一个动态页面嘛。它的网页原始数据其实是没有这个图片的,通过运行JavaScript,把这个图片数据把它插入到网页的html标签里面

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

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

如下:

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

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

我们点击Headers,然后对比这些json数据的头部信息。

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

比较

总结

import requests

import os

def 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 urls

def 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:指定保存的路径

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值