Scrapy 1.0,Python 2.7.9,Ubuntu 15.04。
我在SO上看到了很多类似的问题,但它们都略有不同,没有一个提到无法找到回调错误。
我的问题是我无法从 CrawlSpider 获得任何输出。我已经在DMOZ示例和目标站点上成功使用了BaseSpider(现在是scrapy.Spider)。
我可以从命令行成功地解决问题。但出于某种原因,我的CrawlSpider根本没有任何东西。
这里的代码示例只是众多迭代中的一个。我尝试过使用CrawlSpider和scrapy.Spider。
我试图产生并返回一个Request和一个Item。我已将回调放在规则和方法上。没有任何效果。
我显然做错了什么,它可能很小,很容易,也很明显,但我没有得到它。
import re
import scrapy
from test2.items import Test2Item
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http import Request
from scrapy.loader.processors import Join
class MySpider(CrawlSpider):
name = 't350_crawl2'
allowed_domains = ['example.com']
start_urls = ['https://example.com/350/']
rules = (
Rule(LinkExtractor(allow=('350/'))),
Rule(LinkExtractor(allow=('350.+?\.html'), deny=('public.', 'labs\.creativecommons\.org')), callback='parse_item'),
)
def parse_item(self, response):
default_output_processor = Join()
item = Test2Item()
item['shortTitle'] = response.xpath("//p[@class = 'parties']/text()").extract()
item['offCite'] = response.xpath("//p[@class = 'case_cite']/text()").extract()
item['arrow'] = response.xpath("//p[@class = 'parties']/text()").extract()
item['arrow'] = response.xpath("//p[@class = 'case_cite']/text()").extract()
item['bodyText'] = response.xpath("//*/p").extract()
return item
def print_items(self, response):
filename = response.url.split("/")[-1]
with open(filename, 'wb') as f:
f.write(response.body)
答案 0 :(得分:1)
对于到达此主题的任何人,我建议将所有标签缩进更改为空格。我花了一些时间来搞清楚这一点。即使回调方法在类中,我也在努力使用AttributeError。在使用sublime文本时,这发生在我身上。
希望这有助于某人。