成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

利用 scrapy 集成社區(qū)爬蟲(chóng)功能

Yangyang / 1285人閱讀

摘要:為了方便用戶展示自己的社區(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:使用scrapyd

scrapy文檔中提到了可以使用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

相關(guān)文章

  • 15個(gè)Python庫(kù),讓你學(xué)習(xí)數(shù)據(jù)科學(xué)更輕松

    摘要:在本節(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)容編輯...

    W4n9Hu1 評(píng)論0 收藏0
  • 【Sasila】一個(gè)簡(jiǎn)單易用的爬蟲(chóng)框架

    摘要:所以我模仿這些爬蟲(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)腳本...

    yacheng 評(píng)論0 收藏0
  • Scrapy的架構(gòu)初探

    摘要:引言本文簡(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)。除了...

    劉明 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---10、爬蟲(chóng)框架的安裝:PySpider、Scrapy

    摘要:所以如果對(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 我們直接...

    張憲坤 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<