2014-12-03 19 views
0

나는 치료법을 사용하여 일부 웹 사이트를 크롤링하려고합니다. 다음은 샘플 코드입니다. 메서드 파싱이 호출되지 않습니다. 원자로 서비스 (코드 제공)를 통해 코드를 실행하려고합니다. 그래서 원자로가있는 startCrawling.py에서 실행합니다. 나는 뭔가를 놓친다는 것을 안다. 좀 도와주세요.Python Scrapy- 크롤링 할 수 없습니다.

감사합니다,

Code-categorization.py 

from scrapy.contrib.spiders.init import InitSpider 
from scrapy.http import Request, FormRequest 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.contrib.spiders import Rule 
from scrapy.selector import Selector 
from scrapy.selector import HtmlXPathSelector 
from items.items import CategorizationItem 
from scrapy.contrib.spiders.crawl import CrawlSpider 
class TestingSpider(CrawlSpider): 
     print 'in spider' 
     name = 'testSpider' 
     allowed_domains = ['wikipedia.org'] 
     start_urls = ['http://www.wikipedia.org'] 
     def parse(self, response): 

      # Scrape data from page 
      print 'here' 
      open('test.html','wb').write(response.body) 

코드 - startCrawling.py

from twisted.internet import reactor 
from scrapy.crawler import Crawler 
from scrapy.settings import Settings 
from scrapy import log, signals 
from scrapy.xlib.pydispatch import dispatcher 
from scrapy.utils.project import get_project_settings 

from spiders.categorization import TestingSpider 

# Scrapy spiders script... 

def stop_reactor(): 
    reactor.stop #@UndefinedVariable  
    print 'hi' 

    dispatcher.connect(stop_reactor, signal=signals.spider_closed) 
    spider = TestingSpider() 
    crawler = Crawler(Settings()) 
    crawler.configure() 
    crawler.crawl(spider) 
    crawler.start() 
    reactor.run()#@UndefinedVariable 

답변

2

당신은 CrawlSpider를 사용할 때 parse() 메소드를 오버라이드 (override) 안된다. Rule에 다른 이름으로 맞춤 callback을 설정해야합니다.

크롤링 거미 규칙을 작성하는 콜백으로 구문 분석을 사용하지 않는 상기 CrawlSpider 그 논리를 구현하는 해석 방법 그 자체를 사용 보낸 사람 :
여기에 official documentation에서 발췌 한 것이다. 구문 분석 메서드를 재정의하면 더 이상 크롤링 스파이더가 작동하지 않습니다.

+0

감사합니다. 나는 그 대답을 즉시 받아들입니다. 나는 이것을 밖으로 시도하고 알려드립니다. – user1930402

+1

빠른 속도로 수락했습니다. 방금 클릭하여 녹색으로 바뀌 었습니다. :) – bosnjak

관련 문제