通過核心API啟動單個或多個scrapy爬蟲

1.?可以使用API從腳本運行Scrapy膛檀,而不是運行Scrapy的典型方法scrapy crawl劫樟;Scrapy是基于Twisted異步網(wǎng)絡庫構建的昆稿,因此需要在Twisted容器內(nèi)運行它坊夫,可以通過兩個API來運行單個或多個爬蟲scrapy.crawler.CrawlerProcess、scrapy.crawler.CrawlerRunner荷腊。

2.?啟動爬蟲的的第一個實用程序是scrapy.crawler.CrawlerProcess?。該類將為您啟動Twisted reactor急凰,配置日志記錄并設置關閉處理程序女仰,此類是所有Scrapy命令使用的類。

示例運行單個爬蟲:

交流群:1029344413 源碼抡锈、素材學習資料

import

scrapyfromscrapy.crawlerimport CrawlerProcessclass MySpider(scrapy.Spider):

? ? # Your spider definition? ? ...

process = CrawlerProcess({

? ? 'USER_AGENT':'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'})

process.crawl(MySpider)

process.start() # the script will block here until the crawling is finished

通過CrawlerProcess傳入?yún)?shù)疾忍,并使用get_project_settings獲取Settings 項目設置的實例。

fromscrapy.crawlerimport CrawlerProcessfromscrapy.utils.projectimport get_project_settings

process = CrawlerProcess(get_project_settings())# 'followall' is the name of one of the spiders of the project.process.crawl('followall', domain='scrapinghub.com')

process.start() # the script will block here until the crawling is finished

還有另一個Scrapy實例方式可以更好地控制爬蟲運行過程:scrapy.crawler.CrawlerRunner床三。此類封裝了一些簡單的幫助程序來運行多個爬蟲程序一罩,但它不會以任何方式啟動或干擾現(xiàn)有的爬蟲。

使用此類撇簿,顯式運行reactor聂渊。如果已有爬蟲在運行想在同一個進程中開啟另一個Scrapy推汽,建議您使用CrawlerRunner 而不是CrawlerProcess。

注意歧沪,爬蟲結束后需要手動關閉Twisted reactor歹撒,通過向CrawlerRunner.crawl方法返回的延遲添加回調(diào)來實現(xiàn)。


下面是它的用法示例诊胞,在MySpider完成運行后手動停止容器的回調(diào)暖夭。

fromtwisted.internetimport reactorimport scrapyfromscrapy.crawlerimport CrawlerRunnerfromscrapy.utils.logimport configure_loggingclass MySpider(scrapy.Spider):

? ? # Your spider definition? ? ...

configure_logging({'LOG_FORMAT':'%(levelname)s: %(message)s'})

runner = CrawlerRunner()

d = runner.crawl(MySpider)

d.addBoth(lambda _: reactor.stop())

reactor.run() # the script will block here until the crawling is finished

在同一個進程中運行多個蜘蛛

默認情況下,Scrapy在您運行時為每個進程運行一個蜘蛛撵孤。但是迈着,Scrapy支持使用內(nèi)部API為每個進程運行多個蜘蛛。

這是一個同時運行多個蜘蛛的示例:

import scrapyfromscrapy.crawlerimport CrawlerProcessclass MySpider1(scrapy.Spider):

? ? # Your first spider definition? ? ...class MySpider2(scrapy.Spider):

? ? # Your second spider definition? ? ...

process = CrawlerProcess()

process.crawl(MySpider1)

process.crawl(MySpider2)

process.start() # the script will block here until all crawling jobs are finished

使用CrawlerRunner示例:

import scrapyfromtwisted.internetimport reactorfromscrapy.crawlerimport CrawlerRunnerfromscrapy.utils.logimport configure_loggingclass MySpider1(scrapy.Spider):

? ? # Your first spider definition? ? ...class MySpider2(scrapy.Spider):

? ? # Your second spider definition? ? ...

configure_logging()

runner = CrawlerRunner()

runner.crawl(MySpider1)

runner.crawl(MySpider2)

d = runner.join()

d.addBoth(lambda _: reactor.stop())

reactor.run() # the script will block here until all crawling jobs are finished

相同的示例邪码,但通過異步運行爬蟲蛛:

fromtwisted.internetimport reactor, deferfromscrapy.crawlerimport CrawlerRunnerfromscrapy.utils.logimport configure_loggingclass MySpider1(scrapy.Spider):

? ? # Your first spider definition? ? ...class MySpider2(scrapy.Spider):

? ? # Your second spider definition? ? ...

configure_logging()

runner = CrawlerRunner()

@defer.inlineCallbacksdef crawl():

? ? yield runner.crawl(MySpider1)

? ? yield runner.crawl(MySpider2)

? ? reactor.stop()

crawl()

reactor.run() # the script will block here until the last crawl call is finished

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裕菠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子闭专,更是在濱河造成了極大的恐慌奴潘,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件影钉,死亡現(xiàn)場離奇詭異画髓,居然都是意外死亡,警方通過查閱死者的電腦和手機平委,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門奈虾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人廉赔,你說我怎么就攤上這事肉微。” “怎么了蜡塌?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵碉纳,是天一觀的道長。 經(jīng)常有香客問我岗照,道長村象,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任攒至,我火速辦了婚禮厚者,結果婚禮上,老公的妹妹穿的比我還像新娘迫吐。我一直安慰自己库菲,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布志膀。 她就那樣靜靜地躺著熙宇,像睡著了一般鳖擒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烫止,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天蒋荚,我揣著相機與錄音,去河邊找鬼馆蠕。 笑死期升,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的互躬。 我是一名探鬼主播播赁,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吼渡!你這毒婦竟也來了容为?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤寺酪,失蹤者是張志新(化名)和其女友劉穎坎背,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體房维,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡沼瘫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咙俩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡湿故,死狀恐怖阿趁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坛猪,我是刑警寧澤脖阵,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站墅茉,受9級特大地震影響命黔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜就斤,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一悍募、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洋机,春花似錦坠宴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽副砍。三九已至,卻和暖如春庄岖,著一層夾襖步出監(jiān)牢的瞬間豁翎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工隅忿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谨垃,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓硼控,卻偏偏與公主長得像刘陶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牢撼,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容