【发布时间】:2012-10-09 09:52:29
【问题描述】:
我已经成功地创建了一个蜘蛛,它可以为域的每个网页检索链接。
我想做同样的事情,但是对于我托管的多个域,为此,我更喜欢使用我的蜘蛛,只需将它作为参数添加到要监视的域。
文档here 解释说我们应该明确定义构造函数并在其中添加参数,然后使用命令scrapy crawl myspider 启动蜘蛛。
这是我的代码:
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
当我启动相同的代码,但没有显式构造函数时,我无法通过 crawl 来执行此操作,我必须改用这个命令:
scrapy runspider /path/to/spider/spider.py
而且我不能在runspider中使用参数,我必须运行 crawl
为什么不能使用scrapy crawl spider? 为什么scrapy crawl 永远不会读取Spider 的名字,就像scrapy runspider 一样?
Scrapy 看起来很棒,但第二眼看起来很令人不安:/
非常感谢您的帮助
【问题讨论】: