python爬虫ajax请求爬取页面不反回数据_Python 爬虫 | Ajax数据爬取

本文介绍了如何使用Python爬虫处理Ajax动态加载的网页,讲解了Ajax的基本概念,分析了Ajax请求的过程,并给出了通过分析请求URL获取数据的示例代码,包括如何构造请求参数和解析返回的JSON数据。
摘要由CSDN通过智能技术生成

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

就是很多网站都有下拉加载,这时会加载更多数据,但是不会跳转界面,这就是Ajax加载过程。这时直接用requests请求是无法获取有效数据的。

目录:

1、准备环境

2、Ajax长什么样

3、分析请求

4、获取数据

目标网站:

1、准备环境

首先要确保安装好请求库requests,若没有安装可以参考前面的文章——爬虫开发环境部署

2、Ajax长什么样

这个网站点击下一页是不会跳转网页的,所有的数据都会在原有的界面展示。这就是使用了Ajax的网站,像下拉加载这些都采用了Ajax。

3、分析请求

打开开发者工具,这里以Chrome浏览器为例

在Elements选项卡中可以查看网页的源代码,这里没有我们要寻找的目标,切换至Network选项卡

请求太多了先清空请求,点击下一页

可以看到多了两个请求,点击第一个请求查看详细信息

这里切换到Response选项卡查看返回的数据

数据被压缩成一行了,点击格式化方便查看

可以发现网页展示的数据就是从这个请求获得的,返回Headers选项卡查看url

把url挑出来

http://10.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112404011455193932689_1586401605072&pn=2&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1586401605111

这是第二页的url

跳出第三页的url看看

http://10.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112404011455193932689_1586401605072&pn=3&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1586401605265

可以看到只有参数pn变了

代码如下:

for i in range(197):

url = 'http://60.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112408744624686429123_1578798932591&pn=' \

'%d&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:' \

'0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,' \

'f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1586266306109' % i

打开url看看内容

用正则表达式把我们想要是数据挑出来就好了

这里传入网页源代码,获取收盘价、成交量、股票代码、名称、最高股价、最低股价、开盘价

def get_stock_data(text):

"""获取股票代码、名称、PE"""

com = re.compile('"f2":(?P.+?),.*?"f6":(?P.+?),.*?"f12":"(?P.+?)",.*?"f14":"(?P.+?)"'

',.*?"f15":(?P.+?),.*?"f16":(?P.+?),.*?"f17":(?P.+?),', re.S)

ret = com.finditer(text)

for i in ret:

yield {

'number': i.group('number'),

'name': i.group('name'),

'start': i.group('start'),

'max': i.group('max'),

'min': i.group('min'),

'end': i.group('end'),

'volume': i.group('volume')

}

觉得写的不错顺便点个赞呗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值