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