昨天呢講了如何通過一個最基本的爬蟲來抓取單個頁面上的數(shù)據(jù),但這樣我們肯定是不能滿足的,比如我們想要抓取一個人的所有微博的數(shù)據(jù),那怎么辦呢?我們不能手動的去點擊“下一頁”,我們肯定需要程序來幫我們做這件事情,所以我們今天的重點就是如何通過程序?qū)崿F(xiàn)自動的跳轉(zhuǎn)頁面爬取數(shù)據(jù)。
Step1
? ? ?首先要做的前期準備工作,其實是針對新浪微博的特點,由于新浪一定要登陸的用戶才能點擊下一頁,不然只能看到第一頁的內(nèi)容,所以我們要模擬登陸。不過之前網(wǎng)上看到的其他模擬登陸的方法都太過復雜了,而且會隨著某浪自己改登陸加密方法而改動,很是不方便,所以我們用cookie的方式來登陸。
? ? ? 首先我們要找到自己在新浪微博的cookie,仍然是登陸手機版,然后在safari中點擊檢查元素,來檢查cookie,查找到了weibo.cn的很多cookie,具體該用哪一個呢?這個...我的解決方法是都記下來傳給瀏覽器,總有一個是有用的。

找到自己的cookie以后的方法就簡單多了。首先我們要用一個dict把所有的cookie記錄下來
headers = {'gsid_CTandWM':'
your cookie'}
然后在發(fā)出請求中加入你的cookie
yield Request("http://weibo.cn/xiena",cookies=headers, callback=self.parse)
這樣就可以成功登陸啦
一定要注意的是,要重寫class的start_requests方法,這樣才能自定義初始訪問狀態(tài),不然默認的狀態(tài)是不會提交cookie的。
Step2
接下來是我們的自動跳轉(zhuǎn)部分,實現(xiàn)自動跳轉(zhuǎn)用的也是request方法,具體實現(xiàn),就是像上一章一樣,用xpath找到要跳轉(zhuǎn)的鏈接,首先要分析html文件

這次我們用的是娜姐的微博,可以看到這個地方的href屬性就是我們需要找的跳轉(zhuǎn)鏈接了,用上次的方法把它提取出來
item['ids'] = sel.xpath('form/div/a/@href').extract()
然后用request方法跳轉(zhuǎn),跳轉(zhuǎn)的時候需要注意加上cookie,同時,item['ids']是一個list,所以要遍歷它
for st in item['ids']:
? ? ? ?st = "http://weibo.cn"+st
? ? ? ?req = Request(url = st,cookies = headers, callback = self.parse)
? ? ? ?yield req
這樣以后,再運行我們的小爬蟲,就可以看到它不斷的自動翻頁爬取內(nèi)容啦~
總結
爬蟲小程序到現(xiàn)在已經(jīng)初步可以運行了,那么下一步就應該考慮優(yōu)化細節(jié),比如調(diào)整爬蟲的爬取時間間隔,避免被封賬號之類的事情0.0,然后要考慮如何優(yōu)化爬蟲的性能,同時考慮同時運行多個爬蟲,分布式工作的方法。