
800819103
在線客服,實時響應
qq群
在線客服,實時響應
客服電話
13318873961
如今互聯網時代,爬蟲無處不在,許多行業都使用爬蟲采集數據,比如電子商務行業,在大量的數據中可以挖掘有價值的資料。
采集的平臺有大有小,小平臺好采集,但大平臺就不容易了,除了反爬機制厲害之外,技術難度也增加了。如果需要采集上百萬的數據,應該怎么采集呢?下面跟精靈代理一起去了解一下百萬級數據怎么爬取。
一、百萬級的數據
1.目標網站的選擇
次我選擇的是大名鼎鼎的Stackoverflow, 程序員心中有兩大圣殿。一個是GitHub里面有很多很多好的庫和源碼,一個就是Stackoverflow里面有很多大牛幫忙回答問題。我們打開Stackoverflow,然后搜索Python相關的問題:
2.頁面分析
發現一共有88萬多個問題,再看一下頁面的列表規律,我們按照每頁最大顯示50個問題,一共有17776頁,數據非常大
二、爬蟲的策略
目前為止我還沒有爬過這么大的數據量,這次看來必須要用神器了scrapy.其實在用神器之前,我們自己寫了多并發的多線程池,我測了一下速度還可以,爬取500個數據大概有6秒左右,跟scrapy差不多
但是考慮到穩定性和方便擴展性,還是用Scrapy比較方便一些
1.頁面的爬取
scrapy的文章和資料非常多,基礎知識這里我就不細細講解.scrapy的內置功能非常強大,如果玩爬蟲scrapy是必須要學習的,使用起來需要按照它的套路,就像樂高玩具一樣,一塊一塊的搭起來就可以.下面我們講一下幾個關鍵的點:
1).頁面列表的構建
整個的stackoverflow上關于Python的問題頁面非常規整,我們可以很容易的構建列表,比如前1000頁range(1,1000),range(1000,2000):
2).單頁面的爬取
我們用scrapy genspider產生一個spider文件,我們用這個文件主要爬取頁面的內容,每個問題的內容都非常的規則,我們用css非常容易可以提?。?/span>
我們主要提取問題標題,問題描述,view,vote,answers,提問時間和用戶的名字這7個維度
2.數據的存儲
我們需要在items.py里面構建一個存儲的數據結構類,把這個7個特征存起來
然后在上面的spider類里面把頁面解析的數據一一對于存起來
item = StackoverflowItem()
item[ 'desc'] = desc
item[ 'title'] =title
item[ 'view'] =view
item[ 'answer'] =answer
item[ 'vote'] =vote
item[ 'start'] = start
item[ 'user'] = user
yield item
三、大規模的爬取
看起來好像一切順利,于是我們開始運行爬蟲爬取,大概爬取12000個數據左右,IP就會被封掉,大量的429 錯誤代碼會出現.很明顯有反爬的策略.這個時候我們的本機IP已經封掉了,這個時候想要繼續爬取,有兩個辦法:
第一種辦法:用代理IP
1).構建一個隨機的代理池
網上免費的代理IP池很多,我們可以自己本地解析這些網頁構建一個代理池,存在數據庫里面,也可以訪問一個付費的穩定的代理.
2).構建一個下載的中間價
Scrapy強大之處在于,它給了我們很多接口,擴展性非常好!基本上爬蟲的方方面面它都內置了,類似Django真是居家旅行必備。我們只需要幾行代碼就能搞定
不要忘記了在Setting里面配置一下:
DOWNLOADER_MIDDLEWARES= {
'stackoverflow.middlewares.RandomProxyMiddleware': 543,
}
但是代理的ip非常不穩定,尤其是免費的。而且代理IP爬取的時間會比本機更慢,畢竟中間加了中轉
第二種方法:重啟貓繼續用本機IP
一般重啟家里的路由器有的時候會換本機的IP地址,因為本機的IP地址爬取的速度是最快,然后放慢爬取的速度,加一些delay.
我采用了第二種方法,爬了999頁大概49950條數據,并且放慢了速度,大概需要20分鐘左右
我們一共有近90萬的數據需要爬取,如果按照這樣的速度去爬取的話,大概需要7個小時才能完全爬取完畢。Scrapy提供了非常完善的異常處理和log分析,即使我們中間爬取出錯了,我們依然可以獲得已經爬取的數據.當然有條件的話可以放在服務器上去爬取,速度會更快.
四、嘗鮮看一下數據
數據長啥樣,我們隨機拿5條出來看一下,數據比較粗糙沒有經過清洗,里面比較有價值的是它的view值和answer值,還有時間和標題
目前才近10萬條的數據,我們先嘗鮮看一下,里面最火的一個問題被998個人圍觀:
結論:
上文詳細的介紹了百萬級數據怎么爬取,其實百萬數據的爬取其上沒有我們想象的那么難,只要熟練使用框架,控制爬取的速度,分段爬取還是可以的! 如果有穩定的代理池和高性能的服務器那就更爽啦。代理池可以自己搭建,也可以選擇購買,比如精靈代理,擁有上千萬的IP池,定期更新IP,滿足爬蟲需求。