互联网金融爬虫怎么写-第三课 雪球网股票爬虫(ajax分析)
大家好啊,话说好久没有出来活动了,组织上安排写代码写了很久,终于又被放出来写教程了,感谢大家一直的支持和厚爱,我会一如既往的帮助大家完成爬虫工程师从入门到放弃的升华。
好,Previous on 系列教程:
互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
互联网金融爬虫怎么写-第二课 雪球网股票爬虫(正则表达式入门)
工具要求与基础知识:
工具要求:
1).神箭手云爬虫框架--这个是爬虫的基础;
2).Chrome浏览器和Chrome的插件XpathHelper--这个用来测试Xpath写的是否正确;
3).Advanced REST Client--用来模拟提交请求。
基础知识:
本教程中设计到web的一些基础原理,如果不了解的,最好提前做一些功课。
开始ajax分析
咱们废话不多说,接着上一课继续研究雪球网,雪球网通过狂拽的js请求,直接把我们打回原形,辛辛苦苦分析半天的页面前功尽弃,不过不要紧,咱们想爬别人数据,就不能害怕js渲染,前面的课程大多都通过种种方式绕过了js请求的方式来完成爬虫,那么这节课,就通过雪球网,来实实在在的面对一下我们的这个无法回避的敌人--ajax。
首先依然打开chrome的开发者工具,点击network的标签。
注意事项:
1).当你打开一个页面,再点开network标签时是不会有信息的,我们需要在打开的情况下,刷新一下页面;
2).为了防止页面突然的跳转而丢失信息,一定要勾上preserved单选框。
具体设置如下图:

刷新页面之后,选中xhr小标签之后,可以清晰的看到一个ajax请求,我们点开预览看下:

看到这个画面,是不是觉得祖国的天空又蓝了一点?

首先,我们先确保我们可以通过直接访问拿到这个ajax请求,我们先把这个请求的地址复制出来:
http://xueqiu.com/stock/cata/stocklist.json?page=1&size=30&order=desc&orderby=percent&type=11%2C12&_=1469588824728
然后,单独粘贴到浏览器的地址栏中,访问看看效果,为了保证实验的独立性,建议大家打开一个chrome的隐身窗口,这样可以防止之前的cookie的污染。

Oh no~ 雪球的码农,我们出来聊一下,我保证不打死你们~
这个时候,很多初学者甚至有一定经验的工程师都方了。不要紧,其实只要不需要登录,我们都还是来得及下班的。
一般来说,限制来自于常见的三个情况:
1).cookie ; 2).referer ; 3).url中的参数
由于2)和3)容易测试,我们一般先测试2)和3),测试方法就是参照我们在浏览器中能正常访问到时的请求,删掉我们可能觉得不重要的参数,逐步测试。这里非常强调的是,我们必须使用控制变量法,首先我们需要重现能够成功获取数据的情况,然后在一个一个变量进行调整,最终将无关的参数全部去除,并找到最核心的参数,这里我们还需要使用一个模拟提交请求的工具。我们这里使用的是chrome的插件Advanced REST Client。同类型的工具很多,大家也可以根据自己的习惯挑选。
我们先将cookie,referer和url完整的复制到请求中去,点击访问看看能不能拿到数据:

下面结果部分被截断了,结果返回的是正常的数据。
那么我们先来确定下2)和3)是否影响,通过删除referer以及url中不相关的参数,重新点击访问我们可以知道,这些参数并不影响返回结果,那这个时候,就只剩下一个可能,就是cookie,当然这个可能是我们最不希望看到了,当然cookie的问题依然分为两种情况:
1).http response返回的cookie设置;2).js对cookie的设置。
如果是1),那还没什么大不了的;如果是2)的话,那估计整个人都要不开心了。
第一件事,我们依然要把cookie中不相关的参数,特别是一些统计代码的cookie删除掉,他们通常很长,很干扰,但是毫无作用。常见的百度统计有这样一些cookie: Hm_Lpvt开头和Hm_lvt开头的,当然一般Hm_开头的大概率百度统计的,其他的大家自己在做的过程中去做总结,这里就不一一解释了。
删除之后发现,只要有xq_a_token这个cookie就可以返回正常的数据,那么我们现在就找找这个cookie是在哪里设置的。
最简单的,先访问一下首页,看看response:

哈哈,可以看到reponse里面的set-cookie中已经有了xq_a_token这个参数,so easy!我们把这个cookie加入到请求中去,顺利的请求到了数据,可见,在爬取这个ajax之前,只需要先访问一下首页就可以获取我们需要的cookie值了。
最后我们再回头看一下ajax的url,经过筛选剩余的url如下:
http://xueqiu.com/stock/cata/stocklist.json?page=1&size=30&order=desc&orderby=percent&type=11%2C12
很高兴的看到了page和size,另外还居然有order和orderby,只能说雪球实在是太贴心,当然最后还有一个type,这个我们多点几个分类就可以看出,这个是沪深一览的分类,相对应的还有美股一览和港股一览。这里我们就不做详细介绍了。
分析就到这里,下一课,我们会开始根据这一课的分析,完成整个代码的编写。
另外对爬虫感兴趣的童鞋可以加qq群讨论:566855261。
互联网金融爬虫怎么写-第三课 雪球网股票爬虫(ajax分析)的更多相关文章
- 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
版权声明:本文为博主原创文章,未经博主允许不得转载. 相关教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 ...
- 手把手教你写电商爬虫-第三课 实战尚妆网AJAX请求处理和内容提取
版权声明:本文为博主原创文章,未经博主允许不得转载. 系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 看完两篇,相信大家已经从开始的 ...
- python爬虫项目-爬取雪球网金融数据(关注、持续更新)
(一)python金融数据爬虫项目 爬取目标:雪球网(起始url:https://xueqiu.com/hq#exchange=CN&firstName=1&secondName=1_ ...
- 5个python爬虫教材,让小白也有爬虫可写,含视频教程!
认识爬虫 网络爬虫,如果互联网是一张蜘蛛网,网络爬虫既是一个在此网上爬行的蜘蛛,爬了多少路程即获取到多少数据. python写爬虫的优势 其实以上功能很多语言和工具都能做,但是用python爬 ...
- CodeIgniter框架入门教程——第三课 URL及ajax
本文转载自:http://www.softeng.cn/?p=74 这节课讲一下CI框架的路由规则,以及如何在CI框架下实现ajax功能. 首先,先介绍CI框架的路由规则,因为CI框架是在PHP的基础 ...
- SQL初级第三课(下)
我们续用第三课(上)的表 辅助表 Student Course Score Teacher Sno ...
- 【第三课】ANR和OOM——贪快和贪多的后果(下)
Out of Mana,法力耗尽. 内存就像法力,耗尽了就什么都不能做了.有时候一个应用程序占用了太大的内存,超过了Android系统为你规定的限制,那么系统就会干掉你,以保证其他app有足够的内存. ...
- 【第三课】ANR和OOM——贪快和贪多的后果(上)
恼人的ANR 早先年用Android的时候,就连很多知名的app也总是莫名其妙崩溃,好像手机快的时候会崩溃,手机卡的时候app会卡死.卡死的时候会弹出来一个框,询问是要结束app还是继续等待.这就是A ...
- QCon 2013 上海 -- 互联网金融
互联网金融应该是最近很火爆的一个领域.由于阿里小贷和余额宝的初步成功,这一块都被视为破除传统金融领域垄断的法宝.大家可能都知道,电商平台.金融和大数据是阿里集团未来的三个重要方面.而关于金融,马云最经 ...
随机推荐
- Android SDK 离线安装方法
有朋友反映从连接直接下载安装包不能获取到最新版本(每次更新后的包地址需要重新去查找),而且经常无法访问. 最方便的方法是使用代理或vpn接入网络,即可及时下载最新版sdk. 作为一名开发人员,流畅地浏 ...
- HDOJ-ACM1071(JAVA) 定积分
这道题做起来有点无奈,定积分已经忘得差不多了~还可恶的去搜索了抛物线的解析式的求法~哈哈 不过求出来的结果不对...等有时间再去研究这个数学问题吧 - - 以下是JAVA实现: import java ...
- mac os的android开发国内库下载地址
http://ubuntu.buct.edu.cn/android/repository/
- HDU 5464 ( Clarke and problem ) (dp)
dp[i][j] := 前i个数和为j的情况(mod p) dp[i][j] 分两种情况 1.不选取第i个数 -> dp[i][j] = dp[i-1][j] 2. 选取第i个数 -> ...
- 问题-[delphi2007、2010]无法二次启动,报EditorLineEnds.ttr被占用,进程一直有bds.exe?
问题现象:delphi2007.2010无法二次启动,报EditorLineEnds.ttr被占用,而且进程中一直有bds.exe的进程? 问题原因:问题处理:方法一:可能是系统更新的东东造在的.KB ...
- javascript获取元素的计算样式
使用css控制页面有4种方式,分别为行内样式(内联样式).内嵌式.链接式.导入式. 行内样式(内联样式)即写在html标签中的style属性中,如<div style="width:1 ...
- java异常处理一
为什么需要异常处理? 郝斌解释:因为有些异常不能间接的利用if else来处理,比如说输入的时候,将键盘输入的内容转换为数字,此事如果用户输入非数字就会出现异常,而在用户输入之前是无法用程序判断用户所 ...
- localstorage本地存储
前段时间项目上用到了本地存储,所以研究看了下,在这做下笔记. 本地存储是一个window的一个属性,分别是localStorage和sessionStorage,两者用法完全相同,只不过一个是sess ...
- 1515:打印1到最大的N位数 @jobdu
题目1515:打印1到最大的N位数 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:625 解决:323 题目描述: 给定一个数字N,打印从1到最大的N位数. 输入: 每个输入文件仅包含一 ...
- 基于smack的xmpp packet 重写
基于Smack 实现Notification数据包.smack的类中有一个org.jivesoftware.smack.packet.IQ只需对他重写即可,在做的时候其实可以简单一点的,如果你使用ti ...