python爬取动态网页-python怎么爬取不同网页内的数据
操作环境
python3.x
选择目标-百度
当我们使用右键查看网页源代码时,出来的是一大堆JavaScript代码,并没有图片链接等信息
因为它是一个动态页面。它的网页原始数据实际上没有这张图片。 通过运行JavaScript,将这个图片数据插入到网页的html标签中
这样做的结果是,虽然我们在开发者工具中可以看到这个html标签,但实际上我们在查看网页的原始数据时,是没有这个标签的。 它仅在运行时加载和显示。 渲染
随便抓包,我们点击Network--XHR,当我们向下滑动滚动条的时候,总会有一个request named: acjson?tn=resultjson&ipn=...,点击它,点击Preview,我们看到这是一块json数据,点击数据,我们可以看到里面有30条数据,每条对应一张图片。
如下:
这样我们就清楚了,百度图片一开始只加载30张图片,当我们向下滑动滚动条时,页面会动态加载json数据python爬取动态网页,每条json数据包含30条信息,信息中还包含信息图片 URLpython爬取动态网页,JavaScript 将解析并显示这些 URL。 这样每滚动到最后就会多出30张图片。
那么,这些一直出现的json数据有哪些规律呢?
我们点击Headers,然后对比这些json数据的头部信息。
通过对比,我们发现headers下的Query String Parameters中的大部分字段没有变化,只有pn字段一直以30为步长递增
比较
总结
导入请求
导入操作系统
def getManyPages(关键字,页面):
参数=[]
对于我在范围内(30,30*页+30,30):
参数.append({
'tn': 'resultjson_com',
'ipn':'rj',
'ct':201326592,
'是': '',
'fp': '结果',
'queryWord':关键字,
'cl':2,
'lm':-1,
'即':'utf-8',
'oe':'utf-8',
'adpicid':'',
'st':-1,
'z':'',
'集成电路':0,
'word':关键字,
's': '',
'se': '',
'标签': '',
'宽度': '',
'高度': '',
“脸”:0,
'类型':2,
'质量控制':'',
'数控':1,
'fr':'',
'pn':我,
'rn':30,
'gsm': '1e',
'1538729559614': ''
})
url = '#39;
网址 = []
对于我在参数中:
urls.append(requests.get(url,params=i).json().get('data'))
返回网址
def getImg(数据列表,本地路径):
if not os.path.exists(localPath): # 创建一个新文件夹
os.mkdir(本地路径)
x = 0
对于数据列表中的列表:
对于列表中的我:
如果 i.get('thumbURL') != 无:
print('正在下载:%s' % i.get('thumbURL'))
ir = 请求。 get(i.get('thumbURL'))
打开(localPath + '%d.jpg' % x, 'wb').write(ir.content)
x += 1
别的:
print('图片链接不存在')
如果 __name__ == '__main__':
dataList = getManyPages('landscape',10) # 参数1:关键字,参数2:下载页数
getImg(dataList,'********') # 参数2:指定保存路径