摘要:為了方便用戶展示自己的社區(qū)資料,雨點兒網(wǎng)中增加了一個社區(qū)爬蟲功能。方案使用運行爬蟲鑒于項目當前的架構(gòu),準備使用來執(zhí)行異步爬蟲。可以同時執(zhí)行多個爬蟲,最大進程數(shù)可配,防止系統(tǒng)過載。尾歡迎使用我們的爬蟲功能來收集社交資料。
序
社區(qū)活躍度或者貢獻越來越受到重視,往往會作為獲得工作或者承接項目的加分項。為了方便用戶展示自己的社區(qū)資料,雨點兒網(wǎng)中增加了一個社區(qū)爬蟲功能。
當前只爬取了用戶主頁上一些簡單的信息,如果有需求請?zhí)岬轿覀兊捻椖孔h題中
效果如下:
功能實現(xiàn)代碼放在了github上,源碼
如圖所示,在之前的架構(gòu)上(http://segmentfault.com/a/1190000003808733),我增加了橙色虛線框內(nèi)的部分,包括:
scrapyd:一個用于運行爬蟲任務(wù)的webservice
spiders:使用scrapy框架實現(xiàn)的爬蟲
mongo:存放爬取的數(shù)據(jù)
使用scrapy框架scrapy是一個python爬蟲框架,想要快速實現(xiàn)爬蟲推薦使用這個。
可以參考如下資料自行學(xué)習(xí):
官方文檔和官方例子
一個簡單明了的入門博客,注意:博客中scrapy的安裝步驟可以簡化,直接使用 pip install scrapy,安裝過程中可能會缺少幾個lib,ubuntu使用 apt-get install libffi-dev libxml2-dev libxslt1-dev -y
使用mongodb存儲數(shù)據(jù)mongo非常適合存儲爬蟲數(shù)據(jù),支持異構(gòu)數(shù)據(jù)。這意味著你可以隨時改變爬蟲策略抓取不同的數(shù)據(jù),而不用擔心會和以前的數(shù)據(jù)沖突(使用sql就需要蛋疼的修改表結(jié)構(gòu)了)。
通過scrapy的pipline來集成mongo,非常方便。
安裝mongo
apt-get install mongodb pip install pymongo使用xpath提取頁面數(shù)據(jù)
在編寫爬蟲的過程中需要使用xpath表達式來提取頁面數(shù)據(jù),在chrome中可以使用XPath Helper來定位元素,非常方便。使用方法:
打開XPath Helper插件
鼠標點擊一下頁面,按住shift鍵,把鼠標移動到需要選取的元素上,插件會將該元素標記為黃色,并給出對應(yīng)的xpath表達式,如下圖:
在爬蟲程序中使用這個表達式selector.xpath(..../text()").extract()
使用scrapyd把爬蟲集成到系統(tǒng)中編寫好爬蟲后,我門可以通過執(zhí)行scrapy crawl spidername命令來運行爬蟲程序,但這還不夠。
通常我們通過手動或者定時任務(wù)(cron)來執(zhí)行爬蟲,而這里我們需要通過web應(yīng)用來觸發(fā)爬蟲。即,當用戶更新綁定的社交賬號時,去執(zhí)行一次爬蟲。來分析一下:
爬蟲執(zhí)行過程中會阻塞當前進程,為了不阻塞用戶請求,必須通過異步的方式來運行爬蟲。
可能有多個用戶同時更新資料,這就要求能夠同時執(zhí)行多個爬蟲,并且要保證系統(tǒng)不會超載。
可以擴展成分布式的爬蟲。
方案1:使用celery運行爬蟲鑒于項目當前的架構(gòu),準備使用celery來執(zhí)行異步爬蟲。但是碰到了兩個問題:
scrapy框架下,需要在scrapy目錄下執(zhí)行爬蟲,否則無法獲取到settings,這個用起來有點別扭,不過還能解決。
celery中反復(fù)運行scrapy的爬蟲會報錯:raise error.ReactorNotRestartable()。原因是scrapy用的twisted調(diào)度框架,不可以在進程中重啟。
stackoverflow上有討論過這個問題,嘗試了一下,搞不定,放棄這個方案。如果你有解決這個問題的方法,期待分享:)
方案2:使用scrapydscrapy文檔中提到了可以使用scrapyd來部署,scrapyd是一個用于運行scrapy爬蟲的webservice,使用者能夠通過http請求來運行爬蟲。
你只需要使用scrapyd-client將爬蟲發(fā)布到scrapyd中,然后通過如下命令就可以運行爬蟲程序。
$ curl http://localhost:6800/schedule.json -d project=myproject -d spider=spider2 {"status": "ok", "jobid": "26d1b1a6d6f111e0be5c001e648c57f8"}
這意味什么:
爬蟲應(yīng)用和自己的web應(yīng)用完全解耦,只有一個http接口。
由于使用http接口,爬蟲可以放在任何能夠被訪問的主機上運行。一個簡易的分布式爬蟲,不是嗎?
scrapyd使用sqlite隊列來保存爬蟲任務(wù),實現(xiàn)異步執(zhí)行。
scrapyd可以同時執(zhí)行多個爬蟲,最大進程數(shù)可配,防止系統(tǒng)過載。
尾歡迎使用我們的爬蟲功能來收集社交資料。
使用方法成為雨點兒網(wǎng)用戶,進入用戶主頁,點擊編輯按鈕
填寫社交賬號,點擊更新按鈕
爬蟲會在幾秒內(nèi)完成工作,刷新個人主頁就能看到你的社區(qū)資料了,你也可以把個人主頁鏈接附在電子簡歷中喲:)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/18799.html
摘要:在本節(jié)中,我們將看到一些最流行和最常用的庫,用于機器學(xué)習(xí)和深度學(xué)習(xí)是用于數(shù)據(jù)挖掘,分析和機器學(xué)習(xí)的最流行的庫。愿碼提示網(wǎng)址是一個基于的框架,用于使用多個或進行有效的機器學(xué)習(xí)和深度學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000018961827?w=999&h=562); 來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯...
摘要:所以我模仿這些爬蟲框架的優(yōu)勢,以盡量簡單的原則,搭配實際上是開發(fā)了這套輕量級爬蟲框架。將下載器,解析器,調(diào)度器,數(shù)據(jù)處理器注入核心成為對象。提供對爬蟲進行管理監(jiān)控。每個腳本被認為是一個,確定一個任務(wù)。 ??現(xiàn)在有很多爬蟲框架,比如scrapy、webmagic、pyspider都可以在爬蟲工作中使用,也可以直接通過requests+beautifulsoup來寫一些個性化的小型爬蟲腳本...
摘要:引言本文簡單講解一下的架構(gòu)。沒錯,開源的通用提取器就是要集成到架構(gòu)中,最看重的是的事件驅(qū)動的可擴展的架構(gòu)。架構(gòu)圖就是針對特定目標網(wǎng)站編寫的內(nèi)容提取器,這是在通用網(wǎng)絡(luò)爬蟲框架中最需要定制的部分。 1. 引言 本文簡單講解一下Scrapy的架構(gòu)。沒錯,GooSeeker開源的通用提取器gsExtractor就是要集成到Scrapy架構(gòu)中,最看重的是Scrapy的事件驅(qū)動的可擴展的架構(gòu)。除了...
摘要:所以如果對爬蟲有一定基礎(chǔ),上手框架是一種好的選擇。缺少包,使用安裝即可缺少包,使用安裝即可上一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)爬取相關(guān)庫的安裝的安裝下一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)爬蟲框架的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---9、APP爬取相關(guān)庫的安裝:Appium的安裝下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---11、爬蟲框架的安裝:ScrapySplash、ScrapyRedis 我們直接...
閱讀 1916·2021-11-25 09:43
閱讀 15878·2021-09-22 15:11
閱讀 2740·2019-08-30 13:19
閱讀 2120·2019-08-30 12:54
閱讀 1966·2019-08-29 13:06
閱讀 1057·2019-08-26 14:07
閱讀 1711·2019-08-26 10:47
閱讀 3169·2019-08-26 10:41