互聯網金融爬蟲怎麼寫-第二課 雪球網股票爬蟲(正則表達式入門)

系列教程:ajax

互聯網金融爬蟲怎麼寫-第一課 p2p網貸爬蟲(XPath入門)正則表達式

正則表達式,又稱正規表示法常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE)編程

正則表達式幾乎出如今每個編程語言中,有着極其普遍的應用,好比作網頁的時候,判斷用戶輸入的是不是郵箱這樣的正則。正則表達式自己寫法基本在各個語言中 都是一致的,不過調用方法可能略有不一樣,在咱們教的爬蟲中,正則表達式主要應用在界定列表url和內容url的格式上,就是什麼url是列表url,什麼 url是內容url,什麼url直接丟棄掉。這樣作主要是爲了提升整個爬蟲的爬取效率,防止爬蟲在無關的url花費太長的時間,固然若是但願全網爬的話, 也能夠不作設定。編程語言

對於手裏有點閒錢的人來講,可能最多見的投資品就是股票了,雖然中國股票市場那叫一個變幻詭譎,妖獸頻出。但依舊相對其餘流通性差,投資門檻高的投資產品來 說,有着國家信用背書的股市依然是不二的投資選擇。股票的數據不少地方都有,咱們今天就經過雪球的行情中心,爬一下當天各個上市公司的股票價格吧。網站

打開雪球行情中心:url

哇,忽然以爲這是咱們教程最高大上的一次。首先,這個頁面就能夠做爲一個不錯的入口Url,由於有着挺多的鏈接,不過從效率來說,雖然爬蟲自己能夠幫咱們去作不少事情,可是最好仍是直接找到列表url會更快一些。咱們繼續往裏找,能夠看到這樣一個界面:spa

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

原諒我實在不懂股市,姑且就認爲這個就是全部股票價格的列表,磚家勿噴~regexp

好了,咱們看下這個下一頁規律blog

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,而後原封不動的寫出來:

首先咱們須要先把正則裏面須要轉義的字符進行轉移,因爲正則表達式中.表明任意字符,?表明指定字符出現0次或者1次,所以若是咱們想匹配這兩個字符自己 的時候必定要記得將他們轉義,固然正則中還有不少其餘字符須要轉移,不過這兩個字符是url中最多見的,也是你們最容易弄錯的地方。

通過轉義以後的字符串是這樣的:

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

能夠看到,這個url裏面並無?只有一個點,所以咱們將點進行轉移,而之因此要有兩個轉義符\\,是由於這一段文字須要寫進字符串中,而字符串自己是需 要對\進行轉義的。轉義完成以後,就看一下不一樣url的共性,不一樣的url之間的共性是除了page後面的數字不同,其餘都是同樣的,那沒咱們只須要對 page後面的數字改寫成正則的形式,正則中提供了一些比較好用的替換符號,如\w表明數字和字母 \d表明數字,這兩個是很經常使用的,另外也能夠經過[0-5]這種形式來表示一個區間。這裏咱們其實就是一個1到多位的數字,所以將數字改寫成\d+,同時 注意轉義符在字符串中要再次轉義,獲得下面的字符串:

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羣討論:342953471。

相關文章
相關標籤/搜索