W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你可以使用 API 從腳本運(yùn)行scrapy,而不是運(yùn)行scrapy via的典型方式 ?scrapy crawl
? .
記住,scrappy構(gòu)建在TwistedAsynchronicNetworkLibrary之上,所以需要在TwistedReactor中運(yùn)行它。
你能用來(lái)運(yùn)行蜘蛛的第一個(gè)工具是 ?scrapy.crawler.CrawlerProcess
? . 這個(gè)類將為您啟動(dòng)一個(gè)扭曲的反應(yīng)器,配置日志記錄和設(shè)置關(guān)閉處理程序。這個(gè)類是所有slapy命令使用的類。
下面是一個(gè)示例,演示如何使用它運(yùn)行單個(gè)蜘蛛。
import scrapy
from scrapy.crawler import CrawlerProcess
class MySpider(scrapy.Spider):
# Your spider definition
...
process = CrawlerProcess(settings={
"FEEDS": {
"items.json": {"format": "json"},
},
})
process.crawl(MySpider)
process.start() # the script will block here until the crawling is finished
在CrawlerProcess中定義字典中的設(shè)置。一定要檢查 ?CrawlerProcess
? 了解其使用細(xì)節(jié)的文檔。
如果您在一個(gè)零碎的項(xiàng)目中,有一些額外的幫助器可以用來(lái)導(dǎo)入項(xiàng)目中的那些組件。你可以自動(dòng)輸入蜘蛛的名字 ?CrawlerProcess
? 及使用 ?get_project_settings
? 得到一個(gè) ?Settings
? 具有項(xiàng)目設(shè)置的實(shí)例。
下面是一個(gè)如何使用 testspiders 以項(xiàng)目為例。
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import 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
還有另一個(gè)Scrapy實(shí)用程序,它提供了對(duì)爬行過程的更多控制: ?scrapy.crawler.CrawlerRunner
? . 這個(gè)類是一個(gè)薄包裝器,它封裝了一些簡(jiǎn)單的幫助器來(lái)運(yùn)行多個(gè)爬行器,但是它不會(huì)以任何方式啟動(dòng)或干擾現(xiàn)有的反應(yīng)器。
使用這個(gè)類,在調(diào)度spider之后應(yīng)該顯式地運(yùn)行reactor。建議您使用 ?CrawlerRunner
? 而不是 ?CrawlerProcess
? 如果您的應(yīng)用程序已經(jīng)在使用Twisted,并且您希望在同一個(gè)反應(yīng)器中運(yùn)行Scrapy。
請(qǐng)注意,蜘蛛完成后,您還必須自己關(guān)閉扭曲的反應(yīng)堆。這可以通過將回調(diào)添加到由 ?CrawlerRunner.crawl
? 方法。
下面是一個(gè)使用它的例子,以及在 ?MySpider
? 已完成運(yùn)行。
from twisted.internet import reactor
import scrapy
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
class 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
參見
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: