2016-09-23 3 views
0

에서 클래스의 수입 인스턴스 나는 parse()이 클래스를 만들었습니다 다음파이썬 - 모듈

class PitchforkSpider(scrapy.Spider): 
    name = "pitchfork_reissues" 
    allowed_domains = ["pitchfork.com"] 
    #creates objects for each URL listed here 
    start_urls = [ 
        "http://pitchfork.com/reviews/best/reissues/?page=1", 
        "http://pitchfork.com/reviews/best/reissues/?page=2", 
        "http://pitchfork.com/reviews/best/reissues/?page=3", 
    ] 

    def parse(self, response): 

     for sel in response.xpath('//div[@class="album-artist"]'): 
      item = PitchforkItem() 
      item['artist'] = sel.xpath('//ul[@class="artist-list"]/li/text()').extract() 
      item['reissue'] = sel.xpath('//h2[@class="title"]/text()').extract() 

     return item 

내가 class가 속한 곳 module를 가져옵니다

from blogs.spiders.pitchfork_reissues_feed import * 

을하고 다른 parse()를 호출하려고 컨텍스트 :

def reissues(self): 

    pitchfork_reissues = PitchforkSpider() 
    reissues = pitchfork_reissues.parse('response') 
    print (reissues) 

다음 오류가 발생합니다.

pitchfork_reissues.parse('response') 
    File "/Users/vitorpatalano/Documents/Code/Soup/Apps/myapp/blogs/blogs/spiders/pitchfork_reissues_feed.py", line 21, in parse 
    for sel in response.xpath('//div[@class="album-artist"]'): 
AttributeError: 'str' object has no attribute 'xpath' 

무엇이 누락 되었습니까?

답변

0

당신은 문자열 리터럴과 parse를 호출하고 있습니다 :

reissues = pitchfork_reissues.parse('response') 

내가 그 변수 이름이어야합니다 같아요? 그래서 같이 : 그것은 단어 '응답'을 포함하는 문자열 리터럴하지 첫 번째 인수의로

reissues = pitchfork_reissues.parse(response) 

편집

거미의 parse 방법은 scrapy.http.Response의 인스턴스를 필요로한다.

필자는 Scrapy를 직접 사용하지 않았기 때문에 설명서에서 읽은 내용 만 알고 있지만 분명히 이러한 응답 인스턴스는 대개 '다운로더'에 의해 작성됩니다.

Spider의 일반적인 작업 과정에서 Spider의 parse 메서드를 호출하려고 시도하는 것 같습니다. 이 경우 해당 응답을 작성하고 귀하의 거미에게 전달할 책임이 있다고 생각합니다 (parse 메서드). 나에게 다음 역 추적을 제공

+0

:'재발행 = pitchfork_reissues.parse (응답) 나가서 설명하자면 NameError : –

+2

그럼 당신이 (appearantly "다운로드되는 scrapy.http.Response 인스턴스를 필요 defined'되지 전역 이름 '응답' 다운로더에 의해) ". [the docs] (http://doc.scrapy.org/ko/latest/topics/request-response.html#response-objects)를 참조하십시오 :) – Jasper