我的scrapy代码不起作用,我不知道!我想抓住Ikea网站,我首先设计了一个CrawlSpider,它不够具体,无法检索网页的每个链接.所以我设计了一个带有yield请求方法的基本Spider.
这是我的代码:
class IkeaSpider(scrapy.Spider) : name = "Ikea" allower_domains = ["http://www.ikea.com/"] start_urls = ["http://www.ikea.com/fr/fr/catalog/productsaz/8/"] def parse_url(self, response): for sel in response.xpath('//div[@id="productsAzLeft"]'): base_url = 'http://www.ikea.com/' follow_url = sel.xpath('//span[@class="productsAzLink"]/@href').extract() complete_url = urlparse.urljoin(base_url, follow_url) request = Request(complete_url, callback = self.parse_page) yield request def parse_page(self, response):
这是错误日志:
2016-01-04 22:06:31 [scrapy] ERROR: Spider error processing(referer: None) Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 588, in _runCallbacks current.result = callback(current.result, *args, **kw) File "/usr/local/lib/python2.7/dist-packages/scrapy/spiders/__init__.py", line 76, in parse raise NotImplementedError NotImplementedError
masnun.. 8
你的蜘蛛需要一个parse
方法,它是所有初始请求的默认回调.您可以将parse_url
方法重命名为parse
,它将正常工作.
class IkeaSpider(scrapy.Spider) : name = "Ikea" allower_domains = ["http://www.ikea.com/"] start_urls = ["http://www.ikea.com/fr/fr/catalog/productsaz/8/"] def parse(self, response): for sel in response.xpath('//div[@id="productsAzLeft"]'): base_url = 'http://www.ikea.com/' follow_url = sel.xpath('//span[@class="productsAzLink"]/@href').extract() complete_url = urlparse.urljoin(base_url, follow_url) request = Request(complete_url, callback = self.parse_page) yield request
您也可以使用定义的参数手动定义start_requests
方法和产量scrapy.Requests
,callback
就像您在此处所做的那样.
你的蜘蛛需要一个parse
方法,它是所有初始请求的默认回调.您可以将parse_url
方法重命名为parse
,它将正常工作.
class IkeaSpider(scrapy.Spider) : name = "Ikea" allower_domains = ["http://www.ikea.com/"] start_urls = ["http://www.ikea.com/fr/fr/catalog/productsaz/8/"] def parse(self, response): for sel in response.xpath('//div[@id="productsAzLeft"]'): base_url = 'http://www.ikea.com/' follow_url = sel.xpath('//span[@class="productsAzLink"]/@href').extract() complete_url = urlparse.urljoin(base_url, follow_url) request = Request(complete_url, callback = self.parse_page) yield request
您也可以使用定义的参数手动定义start_requests
方法和产量scrapy.Requests
,callback
就像您在此处所做的那样.