Scrapy蜘蛛不起作用

时间:2009-11-27 05:51:30

标签: python 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认可,而其他蜘蛛则不然。我做错了什么?

感谢您的帮助!

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

这两行看起来很麻烦:

u = names.pop()

rules = (Rule(SgmlLinkExtractor(allow=(u, )), callback='parse_item'),)
  • 每次运行脚本时,只会遵循一条规则。考虑为每个URL创建规则。
  • 您尚未创建parse_item回调,这意味着规则不执行任何操作。您定义的唯一回调是parse,它会更改蜘蛛的默认行为。

此外,这里有一些值得研究的事情。

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

答案 2 :(得分:2)

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

本教程中没有写到你应该这样做,但你必须这样做。

答案 3 :(得分:2)

我相信你有语法错误。 name = hxs...无效,因为您未在hxs对象之前定义。

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

答案 4 :(得分:2)

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