当前位置: 首页 > 知识库问答 >
问题:

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

陆栋
2023-03-14

我正在尝试将用户定义的参数传递给scrapy's spider。有人能建议如何做到这一点吗?

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

共有3个答案

姚正真
2023-03-14

使用爬网命令传递参数

抓取抓取myspider-一个类别='我的类别'-一个域='example.com'

要传递参数以在废料上运行,请将 -a 替换为 -d

中文名:端口/时间表 -d 蜘蛛 =我的蜘蛛 -d 类别 ='我的类别' -d 域='示例.com'

蜘蛛将在其构造函数中接收参数。


class MySpider(Spider):
    name="myspider"
    def __init__(self,category='',domain='', *args,**kwargs):
        super(MySpider, self).__init__(*args, **kwargs)
        self.category = category
        self.domain = domain

Scrapy将所有参数作为蜘蛛属性,您可以完全跳过 init 方法。请注意使用 getattr 方法来获取这些属性,以便您的代码不会中断。


class MySpider(Spider):
    name="myspider"
    start_urls = ('https://httpbin.org/ip',)

    def parse(self,response):
        print getattr(self,'category','')
        print getattr(self,'domain','')

胡元明
2023-03-14

以前的答案是正确的,但是您不必每次想要编写 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

它就这样工作了。

冯通
2023-03-14

使用< code>-a选项在< code>crawl命令中传递蜘蛛参数。例如:

scrapy crawl myspider -a category=electronics -a domain=system

蜘蛛可以将参数作为属性访问:

class MySpider(scrapy.Spider):
    name = 'myspider'

    def __init__(self, category='', **kwargs):
        self.start_urls = [f'http://www.example.com/{category}']  # py36
        super().__init__(**kwargs)  # python3

    def parse(self, response)
        self.log(self.domain)  # system

摘自《纸屑病》文档:http://doc.scrapy.org/en/latest/topics/spiders.html#spider-arguments

2013年更新:添加第二个参数

2015年更新:调整措辞

2016年更新:使用更新的基类并添加super,谢谢@Birla

2017年更新:使用Python3超级

# previously
super(MySpider, self).__init__(**kwargs)  # python2

2018年更新:正如@eLRuLL指出的,爬行器可以将参数作为属性访问

 类似资料:
  • 问题内容: 会做到的。我试图将用户定义的参数传递给scrapy的Spider。谁能建议该怎么做? 我在某处读到一个参数,但不知道如何使用它。 问题答案: Spider参数使用选项在命令中传递。例如: Spider程序可以将参数作为属性访问: 摘自Scrapy文档:http ://doc.scrapy.org/en/latest/topics/spiders.html#spider-argument

  • 我正在尝试安装一个带有特殊选项的NPM软件包,它是: 它在Linux上运行良好,但在windows上运行时,我会出现下一个错误 有谁能帮我把它用在Windows10上吗

  • 我在ListItem中设置了一个事件。然后在调用的方法上调用来传递单击的列表项的id和name值。 下面的问题建议使用bind,但似乎将onCLick事件添加到ListItem会破坏列表绑定。 在添加单击事件之前,与的列表范围绑定按预期工作,并填充列表。 此外,如果我尝试没有参数,则单击事件不起作用。 问题: 如何在JSX中的onClick事件绑定中传递参数? 列表定义: 从单击事件调用的方法:

  • 问题内容: 我正在尝试将自己的自定义对象传递到包中: 我得到错误: 问题答案: 一种方法是让您的自定义对象实现Parcelable接口并使用

  • 问题内容: 我已经按照此链接中所述的教程进行操作。在下面的代码中,由于某种原因,数据不会作为参数附加到url上,但是如果我使用它直接将其设置为url 则可以。 问题答案: 对于简单的情况,我建议您使用jQuery 的或语法: 如果您需要捕获失败案例,请执行以下操作: 此外,如果您始终发送JSON字符串,则可以在最后使用$ .getJSON 或$ .post以及另一个参数。

  • 问题内容: Docker 1.9允许将参数传递给dockerfile。参见链接:https : //docs.docker.com/engine/reference/builder/#arg 如何在docker-compose.yml中传递相同的参数? 如果可能,也请提供示例。 问题答案: 此功能已在Compose 1.6中添加。 参考:https : //docs.docker.com/comp