2014-12-26 3 views
0

학습 치료를위한 자습서는 this 이었지만 매우 이상한 문제가 있습니다. URL start_urls을 추출하여 data.json에 넣습니다. 저는 여기에 사용되는 코드입니다 :Scrapy를 사용하는 중에 이상한 오류가 발생했습니다.

import scrapy 
from scrapy.contrib.spiders import Rule 
from scrapy.contrib.linkextractors import LinkExtractor 

class ArticleItem(scrapy.Item): 
    url = scrapy.Field() 

class ScholarSpider(scrapy.Spider): 
    name = "scholar" 
    allowed_domains = ["mininova.org/"] 
    start_urls = ['http://www.mininova.org/today'] 
    rules = [Rule(LinkExtractor(allow=['/tor/13278067'], deny=['http://www.mininova.org/today']), 'parse')] 

def parse(self, response): 
    article = ArticleItem() 
    article['url'] = response.url 
    return article 

개발 목적은, 난 단지 URL을 추출 시도하고 /tor/13278067로 끝나는 너무 매우 특정 URL했다.

[{"url": "http://www.mininova.org/today"}] 

답변

1

당신은 CrawlSpider 대신 Spider에서 상속 할 필요가 rules를 사용하려면이이었다

$ scrapy crawl scholar -o data.json 

그리고 내가 찾은 data.json의 내용 : 나는 다음과 같은 방법으로 거미를 달렸다. 그러나 CrawlSpider에서 상속하는 경우 parse() 메서드를 재정의하지 말고 콜백에 다른 이름을 사용해야합니다. 기본적으로 필요한 것은 다음과 같습니다.

import scrapy 
from scrapy.contrib.spiders import Rule, CrawlSpider 
from scrapy.contrib.linkextractors import LinkExtractor 

class ArticleItem(scrapy.Item): 
    url = scrapy.Field() 

# inherit from CrawlSpider instead of Spider 
class ScholarSpider(CrawlSpider): 
    name = "scholar" 
    allowed_domains = ["mininova.org"] 
    start_urls = ['http://www.mininova.org/today'] 
    rules = [Rule(LinkExtractor(allow=['/tor/\d+']), callback='parse_url')] 

    # do not use parse() because CrawlSpider 
    # needs it for his normal operation 
    def parse_url(self, response): 
     article = ArticleItem() 
     article['url'] = response.url 
     return article 
+0

오케이. 제 경우에는 'CrawlSpider'가 치료 모듈에 없었습니다. '13278067'을'\ d +'로 바꿨을 때 첫 번째 결과 만 긁어 냈습니다. 왜 그런지 알아? 또한 json 파일에는 출력이 없습니다. –

+0

죄송합니다, 실수. 내 대답을 업데이트했습니다, CrawlSpider는'scrapy.contrib.spiders.CrawlSpider'에 있습니다. – bosnjak

+0

'\ d +'와 마찬가지로 작동 할 것입니다. 나는 그것을 반영하기 위해 나의 대답을 업데이트했다. 'scrap crawl scholar -o data.jl'로 실행하십시오. – bosnjak

관련 문제