由于到目前为止没有任何工作,我用
开始了一个新项目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认可,而其他蜘蛛则不然。我做错了什么?
感谢您的帮助!
答案 0 :(得分:6)
还请检查scrapy的版本。最新版本使用“name”而不是“domain_name”属性来唯一标识蜘蛛。
答案 1 :(得分:3)
这两行看起来很麻烦:
u = names.pop()
rules = (Rule(SgmlLinkExtractor(allow=(u, )), callback='parse_item'),)
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
方法。