2009-11-27 199 views
-1

由于没有到目前为止的工作,我开始Scrapy蜘蛛不工作

python scrapy-ctl.py startproject Nu 

一个新的项目我也跟着教程完全相同,并且创建的文件夹,一个新的蜘蛛

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item 
from Nu.items import NuItem 
from urls import u 

class NuSpider(CrawlSpider): 
    domain_name = "wcase" 
    start_urls = ['http://www.whitecase.com/aabbas/'] 

    names = hxs.select('//td[@class="altRow"][1]/a/@href').re('/.a\w+') 

    u = names.pop() 

    rules = (Rule(SgmlLinkExtractor(allow=(u,)), callback='parse_item'),) 

    def parse(self, response): 
     self.log('Hi, this is an item page! %s' % response.url) 

     hxs = HtmlXPathSelector(response) 
     item = Item() 
     item['school'] = hxs.select('//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)') 
     return item 

SPIDER = NuSpider() 

和当我运行

C:\Python26\Scripts\Nu>python scrapy-ctl.py crawl wcase 

我得到

[Nu] ERROR: Could not find spider for domain: wcase 

其他蜘蛛至少被Scrapy认可,这个不是。我究竟做错了什么?

感谢您的帮助!

+1

你能提供一个链接到教程(如果它在线)吗?将是一个有趣的阅读:) – RYFN

+0

是的,这里是CrawlSpider示例的链接:http://doc.scrapy.org/topics/spiders。html#crawlspider-example – Zeynel

回答

2

您是否在scrapy_settings.py的SPIDER_MODULES列表中包含了蜘蛛?

它不是写在教程的任何地方,你应该这样做,但你必须这样做。

+0

这是项目创建时包含的: SPIDER_MODULES = ['Nu.spiders'] 但我不知道是否需要添加domain_name ='wcase'? 蜘蛛现在正在运行,但它只是扫描初始url,它不会去允许的链接。看到我的其他问题http://stackoverflow.com/questions/1809817/scrapy-sgmllinkextractor-question – Zeynel

2

我相信你有语法错误。 name = hxs...将不起作用,因为您没有在hxs对象之前定义。

尝试运行python yourproject/spiders/domain.py以获取语法错误。

3

这两条线看起来像他们造成麻烦:

u = names.pop() 

rules = (Rule(SgmlLinkExtractor(allow=(u,)), callback='parse_item'),) 
  • 只有一个规则将每个脚本运行时执行。考虑为每个网址创建一个规则。
  • 您还没有创建parse_item回调,这意味着规则什么也不做。您定义的唯一回调是parse,它改变了蜘蛛的默认行为。

此外,这里有一些值得研究的内容。

  • CrawlSpider不喜欢使其默认parse方法重载。在文档或文档中搜索parse_start_url。您会看到,这是覆盖您的起始网址的默认parse方法的首选方式。
  • NuSpider.hxs在它被定义之前被调用。
6

请检查scrapy的版本。最新版本使用“name”而不是“domain_name”属性来唯一标识一个蜘蛛。

2

您正在重写parse方法,而不是实施新的parse_item方法。