当前位置: 主页 > Python语言

python爬取动态网页-python怎么爬取不同网页内的数据

发布时间:2023-02-09 14:31   浏览次数:次   作者:佚名

操作环境

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