Ajax数据获取

Posted 一只有想法的爬虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax数据获取相关的知识,希望对你有一定的参考价值。

声明: 本教材用于学习交流,如有侵权问题联系本人删除!

 

阅读本文大概需要 5 分钟。

 



Ajax 即“Asynchronous javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
很多网站都有下拉加载,这时会加载更多数据,但是不会跳转界面,这就是Ajax加载过程。这时直接用requests请求是无法获取有效数据的。

目录:

1、准备环境

2、Ajax长什么样

3、分析请求

4、获取数据


目标网站:

http://quote.eastmoney.com/center/gridlist.html#hs_a_board


1、准备环境

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


2、Ajax长什么样

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


3、分析请求

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

Ajax数据获取

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

Ajax数据获取

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

Ajax数据获取

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

Ajax数据获取

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

Ajax数据获取

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

Ajax数据获取

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

Ajax数据获取

第二页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看看

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变了


打开url看看内容,没有问题就说明我们对了

Ajax数据获取


4、获取数据

用正则表达式把我们想要是数据挑出来就好了,怎么写正则表达式这里就不再赘述了不懂的可以看之前的正则表达式实战——
这里传入网页源代码,获取收盘价、成交量、股票代码、名称、最高股价、最低股价、开盘价
def get_stock_data(text): """获取股票代码、名称、PE""" com = re.compile('"f2":(?P<end>.+?),.*?"f6":(?P<volume>.+?),.*?"f12":"(?P<number>.+?)",.*?"f14":"(?P<name>.+?)"' ',.*?"f15":(?P<max>.+?),.*?"f16":(?P<min>.+?),.*?"f17":(?P<start>.+?),', 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') }





Ajax数据获取



  扫描二维码

了解更多技能




好文和朋友一起看

以上是关于Ajax数据获取的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 响应:数据(JSON、XML)还是 HTML 片段? [关闭]

执行AJAX返回HTML片段中的JavaScript脚本

前端面试题之手写promise

如何从 Firebase 获取数据到 Recyclerview 中的片段?

使用片段从数据库 SQLite 获取数据时出错

Javascript代码片段在drupal中不起作用