我正在尝试将用户定义的参数传递给scrapy's spider。有人能建议如何做到这一点吗?
我在某个地方读到一个参数-a
,但不知道如何使用它。
使用爬网命令传递参数
抓取抓取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','')
以前的答案是正确的,但是您不必每次想要编写 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
它就这样工作了。
使用< 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