Python爬虫-Scrapy框架(项目实战)- 爬取动态页面

写在前面

经过前面的学习,对Scrapy框架有了一定的了解,并且也写了很多基础的爬虫,但是这些都是从自身掌握的知识出发,也就是会啥爬啥。今天尝试一个新的挑战,借助这个偶然的机会,转战股票基金领域,从分析网站架构开始一个未知的爬虫项目。
声明:本次要爬取的网站为东方财富网,所有得到的数据仅用于学术分析,均无商业用途。

爬虫目标

整个项目的主要目的是爬取东方财富网提供的各个证券的融资融券相关数据,想要爬取到所有证券近半年时间里每日的收盘价、融资融券余额以及融资融券差值。
来到东方财富网-融资融券,会发现我们可以在下图所示的这个部分获得所有的证券信息,点进去每一个证券之后就可以进一步获取该证券每日详细的融资融券信息。
east
east

爬取动态加载页面

动态加载页面

如果在平时浏览网站时有留意过网页加载方式的话,可能会发现常见的两种情况,一种是网页会加载一段时间,然后网页的所有内容一起展现出来;另外一种是网页打开速度很快,但是网页中的内容是一部分一部分加载出来的,这种情况就是所说的动态加载页面
动态加载就是通过ajax请求接口拿到数据喧染在网页上,当然对于像我一样的小白来说,丝毫不知道ajax到底是啥,下面借助Chrome浏览器的开发者工具来观察一些神奇的东西。
chrome
这就是这次爬虫项目想要爬取的网站,暂且不在意想要爬取的数据在哪里,来到开发者工具的Network选项,会发现这里暂时是没有内容的。
chrome
接下来刷新页面,就是通常意义上的重新加载页面,会发现这里多了很多内容,这些就是在加载页面时动态加载的内容。

按照原来的方式爬取这个网站可以吗?

这里简单借助命令行程序,通过shell命令演示,如果采取原来的方式爬取这个网站是否会爬取到想要的数据。
blank
以上就是shell得到的response,很显然,和预想的有很大差别,并没有爬取到我们想要得到的数据,这也说明包括那一部分在内的很多元素都是动态加载出来的。

另辟蹊径

首先点击查看更多数据来到证券交易明细页面。接下来从刚刚动态加载出的所有内容中,寻找我们想要的数据,虽然暂时还不知道这些数据会是什么类型的,但是如果不出意外的话,它一定会出现在这里。经过不懈的寻找,发现了下面这个文件。
chrome
通过preview我们可以预览其中的内容,发现data里面存放的正是想要的数据。chrome
右键点击该文件,选择在新的标签页打开,恍然大悟,这其实就是一个Json格式的文件,很简单,我们只需要爬取这个页面即可。
json
接下来按照原来的思路,分析一下这个比较长的url地址。

http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?type=RZRQ_DETAIL_NJ&token=70f12f2f4f091e459a279469fe49eca5&filter=(tdate='2019-05-09T00:00:00')&st=rzjmre&sr=-1&p=1&ps=50&js=var xDjBXPPy={pages:(tp),data:(x)}&type=RZRQ_DETAIL_NJ&time=1&rt=51916124

尝试去改变url地址中不同部分的值,会发现p代表的是页数,ps代表的是每页中显示数据的数量,那这里我们将ps的值改为997,就能使其在一页中显示所有的数据,方便我们的爬取。

Json数据的处理

通过爬虫直接爬取这个页面,得到的是Json类型的数据,很显然并不能直接用python语言去处理,这里就用到了json包中的decode函数,对Json数据进行解码。

datas = response.body.decode('UTF-8')

接下来就可以运用字典和列表的知识继续对datas进一步的处理,进而获取到我们需要的所有信息。

总结一下

其实到这里整个项目并没有实现最初的目标,但是已经解决了最棘手的问题,接下来的操作可以利用我们之前的思路,从当前页面获取到每一个证券的scode,然后进行拼接,得到新的url,进一步获取每天的详细数据,最终达成目的。
由于种种原因,此次并没有提供很多源码,只是解释了比较细节的原理,如果在这方面遇到了问题而且读了这篇文章还是没有解决的话,欢迎通过电子邮件 sunzhihao_future@nuaa.edu.cn 联系我,很乐意竭尽所能提供帮助,希望能共同进步。

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值