python爬取一条新闻内容_一个爬取近百万数据的Python爬虫
菜鳥獨白
我寫爬蟲也有一段時間了,目前還沒有爬過百萬級的數據.前段時間身體不舒服,冬天是流感的高發季節,一直沒有寫原創的文章,很多鐵桿粉絲也非常關心我,留言詢問!非常感謝大家的關心,周末我身體稍微好點了,于是我想自己也沒有爬過百萬級的數據,要不就試試看爬一個百萬數據吧.
01百萬級的數據
1.目標網站的選擇
這次我選擇的是大名鼎鼎的Stackoverflow, 程序員心中有兩大圣殿。一個是GitHub里面有很多很多好的庫和源碼,一個就是Stackoverflow里面有很多大牛幫忙回答問題。我們打開Stackoverflow,然后搜索Python相關的問題:
2.頁面分析
發現一共有88萬多個問題,再看一下頁面的列表規律,我們按照每頁最大顯示50個問題,一共有17776頁,數據非常大
02爬蟲的策略
目前為止我還沒有爬過這么大的數據量,這次看來必須要用神器了scrapy.其實在用神器之前,我們自己寫了多并發的多線程池,我測了一下速度還可以,爬取500個數據大概有6秒左右,跟scrapy差不多
但是考慮到穩定性和方便擴展性,還是用Scrapy比較方便一些
1.頁面的爬取
scrapy的文章和資料非常多,基礎知識這里我就不細細講解.scrapy的內置功能非常強大,如果玩爬蟲scrapy是必須要學習的,使用起來需要按照它的套路,就像樂高玩具一樣,一塊一塊的搭起來就可以.下面我們講一下幾個關鍵的點:
1).頁面列表的構建
整個的stackoverflow上關于Python的問題頁面非常規整,我們可以很容易的構建列表,比如前1000頁range(1,1000),range(1000,2000):
2).單頁面的爬取
我們用scrapy genspider產生一個spider文件,我們用這個文件主要爬取頁面的內容,每個問題的內容都非常的規則,我們用css非常容易可以提取:
我們主要提取問題標題,問題描述,view,vote,answers,提問時間和用戶的名字這7個維度
2.數據的存儲
我們需要在items.py里面構建一個存儲的數據結構類,把這個7個特征存起來
然后在上面的spider類里面把頁面解析的數據一一對于存起來
item = StackoverflowItem()item['desc'] = descitem['title']=titleitem['view']=viewitem['answer']=answeritem['vote']=voteitem['start'] = startitem['user'] = useryield item
03大規模的爬取
看起來好像一切順利,于是我們開始運行爬蟲爬取,大概爬取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分析,即使我們中間爬取出錯了,我們依然可以獲得已經爬取的數據.當然有條件的話可以放在服務器上去爬取,速度會更快.
04嘗鮮看一下數據
數據長啥樣,我們隨機拿5條出來看一下,數據比較粗糙沒有經過清洗,里面比較有價值的是它的view值和answer值,還有時間和標題
目前才近10萬條的數據,我們先嘗鮮看一下,里面最火的一個問題被998個人圍觀:
結論:
百萬數據的爬取其上沒有我們想象的那么難,只要熟練使用框架,控制爬取的速度,分段爬取還是可以的! 如果有穩定的代理池和高性能的服務器那就更爽啦。等我全部爬取完畢之后,我也想知道Stackoverflow上面關于Python有哪些非常火的問題,大家都在關心Python哪些方面,這近百萬的數據時間分布如何,敬請期待吧!
大數據培訓、人工智能培訓、Python培訓、大數據培訓機構、大數據培訓班、數據分析培訓、大數據可視化培訓,就選光環大數據!光環大數據,聘請專業的大數據領域知名講師,確保教學的整體質量與教學水準。講師團及時掌握時代潮流技術,將前沿技能融入教學中,確保學生所學知識順應時代所需。通過深入淺出、通俗易懂的教學方式,指導學生更快的掌握技能知識,成就上萬個高薪就業學子。
更多問題咨詢,歡迎點擊------>>>>在線客服!
總結
以上是生活随笔為你收集整理的python爬取一条新闻内容_一个爬取近百万数据的Python爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄一老师讲述贷款“黑名单”小心别上了黑名
- 下一篇: Python运维(六)--系统监控psu