互联网金融爬虫怎么写-第二课 雪球网股票爬虫(正则表达式入门)

系列教程:ajax

互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门) 正则表达式

上一节课咱们一块儿经过一个p2p网贷爬虫,深刻了解了一下XPath以及其在最终实际使用中的写法。能够绝不夸张的说,对于写简单爬虫来讲,最最重要的,就是使用好XPath,以及这一课要讲的正则表达式。编程

正则表达式,又称正规表示法、常规表示法(英语:Regular   Expression,在代码中常简写为regex、regexp或RE)segmentfault

正则表达式几乎出如今每个编程语言中,有着极其普遍的应用,好比作网页的时候,判断用户输入的是不是邮箱这样的正则。正则表达式自己写法基本在各个语言中都是一致的,不过调用方法可能略有不一样,在咱们教的爬虫中,正则表达式主要应用在界定列表url和内容url的格式上,就是什么url是列表url,什么url是内容url,什么url直接丢弃掉。这样作主要是为了提升整个爬虫的爬取效率,防止爬虫在无关的url花费太长的时间,固然若是但愿全网爬的话,也能够不作设定。编程语言

对于手里有点闲钱的人来讲,可能最多见的投资品就是股票了,虽然中国股票市场那叫一个变幻诡谲,妖兽频出。但依旧相对其余流通性差,投资门槛高的投资产品来讲,有着国家信用背书的股市依然是不二的投资选择。股票的数据不少地方都有,咱们今天就经过雪球的行情中心,爬一下当天各个上市公司的股票价格吧。测试

打开雪球行情中心:网站

strip

哇,忽然以为这是咱们教程最高大上的一次。首先,这个页面就能够做为一个不错的入口Url,由于有着挺多的链接,不过从效率来说,虽然爬虫自己能够帮咱们去作不少事情,可是最好仍是直接找到列表url会更快一些。咱们继续往里找,能够看到这样一个界面:url

https://xueqiu.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=1

1240

原谅我实在不懂股市,姑且就认为这个就是全部股票价格的列表,砖家勿喷~spa

好了,咱们看下这个下一页规律code

https://xueqiu.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=2

https://xueqiu.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=3

看着这种url的结构,发自心里想说:
图片描述

好了,咱们先根据这个链接来提取一下正则表达式,首先咱们选中其中一个url,而后原封不动的写出来:

https://xueqiu.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=2

首先咱们须要先把正则里面须要转义的字符进行转移,因为正则表达式中.表明任意字符,?表明指定字符出现0次或者1次,所以若是咱们想匹配这两个字符自己的时候必定要记得将他们转义,固然正则中还有不少其余字符须要转移,不过这两个字符是url中最多见的,也是你们最容易弄错的地方。

通过转义以后的字符串是这样的:

https://xueqiu\\.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=2
https://xueqiu\\.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=\\d+

最后,一个经验性的东西值得注意,通常来讲https的网站都会支持http,甚至有的链接会写成http,所以这里为了程序的健壮性,最好将这段正则修改一下兼容http的格式,修改的方式是咱们容许s存在或者不存在,正则中提供了三个字符表示字符出现数量的区间,分别是?表示0或1次,+表示1或屡次,*表示0或屡次。这里很明显的,咱们应该使用?:

https?://xueqiu\\.com/hq#exchange=CN&plate=1_1_0&firstName=1&secondName=1_1&type=sha&page=\\d+

注意这个问号是正则本身的问号,并不须要转义。

这样咱们就把列表页的url的正则表达式写出来了。

一样的方法,咱们写出内容页的正则表达式:

https?://xueqiu\\.com/S/SH\\d{6}

这里的{6}表示有6位,当位数肯定或者范围肯定时,可使用花括号的形式来表示。再次申明,因为自己股票知识匮乏,暂且认为全部代码都是6位的。

写到这里感受已经离大功告成不远了,然而,当咱们测试就能够发现,全部页面的url实际上都是由js生成的,经过ajax请求来的。前功尽弃啊,不过还好我们还学到了东西。不要灰心,黎明就在最黑暗的时间以后。咱们下一课就给你们讲一讲碰到这些个ajax请求该怎么办。

对爬虫感兴趣的童鞋能够加qq群讨论:566855261。

相关文章
相关标签/搜索