2017-02-17 165 views
1

我有兩個CrawlerProcesses,每個都調用不同的蜘蛛。我想通過自定義設置,這些過程中的一個保存蜘蛛CSV的輸出,我想我能做到這一點:如何通過scrapy中的CrawlerProcess傳遞自定義設置?

storage_settings = {'FEED_FORMAT': 'csv', 'FEED_URI': 'foo.csv'} 
process = CrawlerProcess(get_project_settings()) 
process.crawl('ABC', crawl_links=main_links, custom_settings=storage_settings) 
process.start() 

,並在我的蜘蛛我讀它們作爲參數:

def __init__(self, crawl_links=None, allowed_domains=None, customom_settings=None, *args, **kwargs): 
    self.start_urls = crawl_links 
    self.allowed_domains = allowed_domains 
    self.custom_settings = custom_settings 
    self.rules = ...... 
    super(mySpider, self).__init__(*args, **kwargs) 

但我怎麼能告訴我的項目設置文件「settings.py」關於這些自定義設置?我不想對它們進行硬編碼,而是希望自動讀取它們。

+0

我不知道這是可能的話,每個蜘蛛配置文件的方法來解決?多數民衆贊成在我的項目中如何做到這一點。 – voidpointercast

+0

我試圖這樣做的目標是在for循環中插入進程,然後我可以自動爲csv輸出文件指定不同的名稱。我可以使用配置文件嗎?你能詳細說明一下嗎? – owise

回答

2

你不能告訴你的文件這些設置。您可能會在抓取工具設置和蜘蛛設置之間感到困惑。在scrapy中,截至這段時間的feed參數需要傳遞給爬蟲進程,而不是蜘蛛。您必須將它們作爲參數傳遞給您的搜尋器進程。我和你有相同的用例。你所做的是讀取當前的項目設置,然後覆蓋每個爬蟲進程。請參閱下面的示例代碼:

s = get_project_settings() 
s['FEED_FORMAT'] = 'csv' 
s['LOG_LEVEL'] = 'INFO' 
s['FEED_URI'] = 'Q1.csv' 
s['LOG_FILE'] = 'Q1.log' 

proc = CrawlerProcess(s) 

然後您致電process.crawl()是不正確的。蜘蛛的名稱應爲第一個參數是一個字符串傳遞,就像這樣:process.crawl('MySpider', crawl_links=main_links)當然MySpider的,應該是在你的蜘蛛類給name屬性的值。

0

不要通過設置crawl()方法。並將第一個參數傳給你的蜘蛛類名稱crawl()

from my_crawler.spiders.my_scraper import MySpider 
from scrapy.crawler import CrawlerProcess 
from scrapy.settings import Settings 
from scrapy.utils.project import get_project_settings 
from twisted.internet import reactor 

process = CrawlerProcess(get_project_settings()) 

process.crawl(MySpider(), crawl_links=main_links) 

process.start() 
+0

這就是我現在正在做的事情,我通過蜘蛛'ABC'的名字作爲第一個參數。 – owise

+0

不是名字,正如我提到的那樣通過類名 – Umair

+0

我會從中得到什麼? – owise

相關問題