python scrapy在尝试使用参数时无法找到蜘蛛

时间:2012-10-09 09:52:30

标签: python scrapy

我已经成功创建了一个蜘蛛检索域的每个网页的链接。

我想做同样的事情,但对于我主持的多个域,为此,我更喜欢使用我的蜘蛛,只需将其作为参数添加到要监控的域中。

文档here解释说我们应该明确定义构造函数并在其中添加参数,然后使用命令scrapy crawl myspider启动spider。

这是我的代码:

class MySpider(BaseSpider):
    name= 'spider'

    def __init__(self, domain='some_domain.net'):
        self.domain = domain
        self.allowed_domains = [self.domain]
        self.start_urls = [ 'http://'+self.domain ]

    def parse(self, response):
        hxs = HtmlPathSelector(response)
        for url in hxs.select('//a/@href').extract():
            if not url.startswith('http://'):
                url= URL + url 
            print url
        yield Request(url, callback=self.parse)

然而,启动

scrapy crawl spider -a domain='mydomain.my_extension'

返回:

ERROR: unable to find spider: spider

当我使用相同的代码但没有明确的构造函数时,我无法通过爬网执行此操作,我必须使用此命令:

scrapy runspider /path/to/spider/spider.py

我不能在runspider中使用参数,我必须改为运行抓取

为什么不能使用scrapy爬行蜘蛛? 为什么Spider的名字永远不会被scrapy crawl读取,就像scrapy runspider一样?

Scrapy看起来很棒,但第二眼看上去非常令人不安:/

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

如果运行scrapy 0.14您应该在类级别而不是在实例级别设置变量。我认为这已经改变了0.15

我建议您阅读文档:http://doc.scrapy.org/en/0.14/topics/spiders.html

class MySpider(BaseSpider):
        name= 'spider'
        domain = domain
        allowed_domains = [self.domain]
        start_urls = [ 'http://'+self.domain ]


    def parse(self, response):
        hxs = HtmlPathSelector(response)
        for url in hxs.select('//a/@href').extract():
            if not url.startswith('http://'):
                url= URL + url 
            print url
        yield Request(url, callback=self.parse)