我试图将用户定义的参数传递给scrapy的爬行器。有谁能建议一下如何做到这一点吗?
我在某处读到过一个参数-a
,但不知道如何使用它。
发布于 2016-12-13 22:07:28
前面的答案是正确的,但您不必每次编写scrapy的爬行器时都声明构造函数(__init__
),您可以像以前一样指定参数:
scrapy crawl myspider -a parameter1=value1 -a parameter2=value2
在您的爬行器代码中,您可以将它们用作爬行器参数:
class MySpider(Spider):
name = 'myspider'
...
def parse(self, response):
...
if self.parameter1 == value1:
# this is True
# or also
if getattr(self, parameter2) == value2:
# this is also True
它就是这样工作的。
发布于 2020-01-28 21:56:12
或者,我们可以使用ScrapyD,它公开了一个我们可以传递start_url和爬行器名称的API。ScrapyD提供了停止/启动/状态/列出爬行器的接口。
pip install scrapyd scrapyd-deploy
scrapyd
scrapyd-deploy local -p default
scrapyd-deploy
将以蛋的形式将蜘蛛部署到守护进程中,甚至它还会维护蜘蛛的版本。启动爬行器时,您可以提到要使用哪个版本的爬行器。
class MySpider(CrawlSpider):
def __init__(self, start_urls, *args, **kwargs):
self.start_urls = start_urls.split('|')
super().__init__(*args, **kwargs)
name = testspider
curl http://localhost:6800/schedule.json -d project=default -d spider=testspider -d start_urls="https://www.anyurl...|https://www.anyurl2"
附加的好处是,您可以构建自己的UI来接受来自用户的url和其他参数,并使用上面的scrapyd调度API来调度任务。
有关详细信息,请参阅scrapyd API documentation
https://stackoverflow.com/questions/15611605
复制相似问题