如何动态设置Scrapy规则?
问题描述:
我有一个在初始化之前运行一些代码的类:
class NoFollowSpider(CrawlSpider): rules = ( Rule (SgmlLinkExtractor(allow=("", ),), callback="parse_items", follow= True), ) def __init__(self, moreparams=None, *args, **kwargs): super(NoFollowSpider, self).__init__(*args, **kwargs) self.moreparams = moreparams
我正在使用以下命令运行此scrapy代码:
> scrapy runspider my_spider.py -a moreparams="more parameters" -o output.txt
现在,我希望可以从命令行配置名为 rules 的静态变量:
> scrapy runspider my_spider.py -a crawl=True -a moreparams="more parameters" -o output.txt
将 init 更改为:
def __init__(self, crawl_pages=False, moreparams=None, *args, **kwargs): if (crawl_pages is True): self.rules = ( Rule (SgmlLinkExtractor(allow=("", ),), callback="parse_items", follow= True), ) self.moreparams = moreparams
但是,如果我在init中切换静态变量 规则
,则scrapy不再考虑它:它运行,而仅爬取给定的start_urls而不是整个域。看来规则必须是静态的类变量。
那么,如何动态设置静态变量?
我正在尝试从数据框中提取一些数据,但是以下查询仅提取第一个匹配项,而忽略其余匹配项,例如,如果整个数据为:df['value']= 0 123 blah blah blah, 456 ...