首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在scrapy spider中传递用户定义的参数

如何在scrapy spider中传递用户定义的参数
EN

Stack Overflow用户
提问于 2013-03-25 17:35:14
回答 2查看 67.4K关注 0票数 121

我试图将用户定义的参数传递给scrapy的爬行器。有谁能建议一下如何做到这一点吗?

我在某处读到过一个参数-a,但不知道如何使用它。

EN

回答 2

Stack Overflow用户

发布于 2016-12-13 22:07:28

前面的答案是正确的,但您不必每次编写scrapy的爬行器时都声明构造函数(__init__),您可以像以前一样指定参数:

代码语言:javascript
复制
scrapy crawl myspider -a parameter1=value1 -a parameter2=value2

在您的爬行器代码中,您可以将它们用作爬行器参数:

代码语言:javascript
复制
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

它就是这样工作的。

票数 48
EN

Stack Overflow用户

发布于 2020-01-28 21:56:12

或者,我们可以使用ScrapyD,它公开了一个我们可以传递start_url和爬行器名称的API。ScrapyD提供了停止/启动/状态/列出爬行器的接口。

代码语言:javascript
复制
pip install scrapyd scrapyd-deploy
scrapyd
scrapyd-deploy local -p default

scrapyd-deploy将以蛋的形式将蜘蛛部署到守护进程中,甚至它还会维护蜘蛛的版本。启动爬行器时,您可以提到要使用哪个版本的爬行器。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15611605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档