2012-09-25 7 views
2

그래서이 거미를 만들고 있는데 셸에 로그인하여 HTML 페이지를 탐색하고 내 Xpath 쿼리를 테스트 할 수 있기 때문에 잘 돌아갑니다.Xpath 오류 - 스파이더 오류 처리

내가 잘못하고 있는지 확실하지 않습니다. 어떤 도움을 주시면 감사하겠습니다. 나는 Twisted를 다시 설치했다.

내 거미는 다음과 같습니다 -

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from spider_scrap.items import spiderItem 

class spider(BaseSpider): 
name="spider1" 
#allowed_domains = ["example.com"] 
start_urls = [     
       "http://www.example.com" 
      ] 

def parse(self, response): 
items = [] 
    hxs = HtmlXPathSelector(response) 
    sites = hxs.select('//*[@id="search_results"]/div[1]/div') 

    for site in sites: 
     item = spiderItem() 
     item['title'] = site.select('div[2]/h2/a/text()').extract       item['author'] = site.select('div[2]/span/a/text()').extract  
     item['price'] = site.select('div[3]/div[1]/div[1]/div/b/text()').extract()  
    items.append(item) 
    return items 

내가 거미를 실행하면 - scrapy 기어 Spider1 내가 다음과 같은 오류 얻을 -

2012-09-25 17:56:12-0400 [scrapy] DEBUG: Enabled item pipelines: 
    2012-09-25 17:56:12-0400 [Spider1] INFO: Spider opened 
    2012-09-25 17:56:12-0400 [Spider1] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
    2012-09-25 17:56:12-0400 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 
    2012-09-25 17:56:12-0400 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
    2012-09-25 17:56:15-0400 [Spider1] DEBUG: Crawled (200) <GET http://www.example.com> (refere 
    r: None) 
    2012-09-25 17:56:15-0400 [Spider1] ERROR: Spider error processing <GET http://www.example.com 
    s> 
    Traceback (most recent call last): 
     File "C:\Python27\lib\site-packages\twisted\internet\base.py", line 1178, in mainLoop 
     self.runUntilCurrent() 
     File "C:\Python27\lib\site-packages\twisted\internet\base.py", line 800, in runUntilCurrent 
     call.func(*call.args, **call.kw) 
     File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 368, in callback 
     self._startRunCallbacks(result) 
     File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 464, in _startRunCallbacks 
     self._runCallbacks() 
    --- <exception caught here> --- 
     File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 551, in _runCallbacks 
     current.result = callback(current.result, *args, **kw) 
     File "C:\Python27\lib\site-packages\scrapy\spider.py", line 62, in parse 
     raise NotImplementedError 
    exceptions.NotImplementedError: 

    2012-09-25 17:56:15-0400 [Spider1] INFO: Closing spider (finished) 
    2012-09-25 17:56:15-0400 [Spider1] INFO: Dumping spider stats: 
    {'downloader/request_bytes': 231, 
    'downloader/request_count': 1, 
    'downloader/request_method_count/GET': 1, 
    'downloader/response_bytes': 186965, 
    'downloader/response_count': 1, 
    'downloader/response_status_count/200': 1, 
    'finish_reason': 'finished', 
    'finish_time': datetime.datetime(2012, 9, 25, 21, 56, 15, 326000), 
    'scheduler/memory_enqueued': 1, 
    'spider_exceptions/NotImplementedError': 1, 
    'start_time': datetime.datetime(2012, 9, 25, 21, 56, 12, 157000)} 
     2012-09-25 17:56:15-0400 [Spider1] INFO: Spider closed (finished) 
     2012-09-25 17:56:15-0400 [scrapy] INFO: Dumping global stats: 
    {} 
+0

62 번째 줄인 spider.py의 줄은 무엇입니까? – LarsH

+0

Line 62 - def parse (self, response) : raise NotImplementedError – Warlord

+2

게시 한 코드 조각에 들여 쓰기가 올바르지 않습니다. 스크립트에서 두 번 확인하고 싶을 수도 있습니다. – Leo

답변

3

레오 권리를, 들여 쓰기가 올바르지 않습니다. 일부 코드를 붙여 넣고 다른 코드를 직접 입력 했으므로 편집기에 탭과 공백이 모두 있기 때문에 스크립트에서 일부 탭과 ​​공백이 섞여있을 수 있습니다.

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from spider_scrap.items import spiderItem 

class spider(BaseSpider): 
    name = "spider1" 
    start_urls = ["http://www.example.com"] 

    def parse(self, response): 
     items = [] 
     hxs = HtmlXPathSelector(response) 
     sites = hxs.select('//*[@id="search_results"]/div[1]/div') 

     for site in sites: 
      item = spiderItem() 
      item['title'] = site.select('div[2]/h2/a/text()').extract 
      item['author'] = site.select('div[2]/span/a/text()').extract 
      item['price'] = site.select('div[3]/div[1]/div[1]/div/b/text()').extract() 
      items.append(item) 

     return items 
2

당신의 구문 분석 방법은 클래스 코드의 부족이 문제에 직면 해 모두를 위해 기재하는 코드

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from spider_scrap.items import spiderItem 

class spider(BaseSpider): 
    name="spider1" 
    allowed_domains = ["example.com"] 
    start_urls = [ 
     "http://www.example.com" 
    ] 

    def parse(self, response): 
     items = [] 
     hxs = HtmlXPathSelector(response) 
     sites = hxs.select('//*[@id="search_results"]/div[1]/div') 

     for site in sites: 
      item = spiderItem() 
      item['title'] = site.select('div[2]/h2/a/text()').extract       item['author'] = site.select('div[2]/span/a/text()').extract 
      item['price'] = site.select('div[3]/div[1]/div[1]/div/b/text()').extract() 
     items.append(item) 
     return items 
10

를 사용 didn를 확인,하십시오 : 더 같은, 그래서 공간에 모든 탭 변환 'T는이 같은 구문 분석() 메소드의 이름을 변경 I 않았다 :

:

class CakeSpider(CrawlSpider): 
    name   = "cakes" 
    allowed_domains = ["cakes.com"] 
    start_urls  = ["http://www.cakes.com/catalog"] 

    def parse(self, response): #this should be 'parse' and nothing else 

     #yourcode# 

그렇지 않으면이 같은 오류가 발생합니다

저는 3 시간 동안 알아 내려고 노력했습니다.-