2016-07-12 4 views
1

"huis"(네덜란드어로 "house")가 포함 된 모든 링크를 추출하여 웹 사이트를 긁어 내려고합니다. http://doc.scrapy.org/en/latest/topics/spiders.html에 따라, 나는 이전 포스트 (Scrapy Error: TypeError: __init__() got an unexpected keyword argument 'deny') 그것이 가능한 이유처럼 보인다에서 오류 메시지Sciece error : TypeError : __init __() 예기치 않은 키워드 인수 'callback'이 있습니다.

Rule(LinkExtractor(allow=r'.*huis.*', callback='parse_item')) 
TypeError: __init__() got an unexpected keyword argument 'callback' 

받고 있어요, 그러나

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

from Funda.items import FundaItem 

class FundaSpider(scrapy.Spider): 
    name = "Funda" 
    allowed_domains = ["funda.nl"] 
    start_urls = [ 
     "http://www.funda.nl/koop/amsterdam/" 
    ] 

    rules = (
    Rule(LinkExtractor(allow=r'.*huis.*', callback='parse_item')) 
    ) 

    def parse_item(self, response): 
     item = FundaItem() 
     item['title'] = response.extract() 
     return item 

을 시도하고있어 등이 일치하지 않는 브라켓입니다 키워드가 LinkExtractor 대신 Rule으로 전달되었습니다. 그러나이 경우에는 callback이 의도 한대로 괄호안에있는 것으로 보입니다.

어떤 아이디어가이 오류의 원인입니까?

답변

3

예, callback은 확실히 LinkExtractor으로 전달됩니다. 그것은 실제로 문제가되는 것 같습니다. the documentation에 해당 클래스의 예상 매개 변수 아래에 callback이 표시되지 않기 때문입니다.

Rule 클래스 에 문서에 나열된 콜백 매개 변수가 있습니다. 그래서 이라고 가정하면이 LinkExtractor 대신 규칙에 전달됩니까?

Rule(LinkExtractor(allow=r'.*huis.*'), callback='parse_item') 

당신이 생각하는 "하지만 링크 된 질문의 답변자가 LinkExtractor 전화 내부 callback을 넣어? 왜 그랬는지"나는 당신이 인정 하듯이 다소 혼란 괄호의 중첩을 잘못 해석 할 수있다 생각합니다. 레이아웃을 변경하면 조금 더 명확 해집니다.

rules = (
    Rule(
     LinkExtractor(
      allow=[r'/*'], 
      deny=('blogs/*', 'videos/*',) 
     ), 
     callback='parse_html' 
    ), 
) 
관련 문제