2016-07-09 4 views
2

다른 버전의이 질문을 읽었지만 내 상황과 관련있는 것을 찾을 수 없었습니다. 하나 있다면 사과 드리며 지금은 몇 시간 동안 꼼짝 않고 지켜보고 있습니다.파이썬 - 글로벌 이름이 정의되지 않았습니다

나는이 많은 것을 가지고 놀았고 실제로 한 버전에서 결과를 얻었습니다.

'start_URLs'변수는 함수보다 먼저 목록으로 정의되어 있지만 어떤 이유로 글로벌/모듈 수준에 등록되지 않습니다.

여기에 정확한 오류입니다 : start_urls에 listing_url_list을 위해 : 나가서 설명하자면 NameError가 : 전역 이름 'start_urls이'

import time 
import scrapy 
from scrapy.http import Request 
from scrapy.selector import Selector 
from scrapy.spiders import CrawlSpider, Rule 
from scraper1.items import scraper1Item 

from scraper1 import csvmodule 

absolute_pos = './/*[@id="xpath"]/td/@class' 

class spider1(CrawlSpider): 
    name = 'ugh' 
    allowed_domains = ["ugh.com"] 
    start_urls = [ 
     "http://www.website.link.1", 
     "http://www.website.link.2", 
     "http://www.website.link.3" 
    ] 

    def parse(self, response): 
     Select = Selector(response) 
     listing_url_list = Select.xpath('.//*[@id="xpath"]/li/div/a/@href').extract() 
     for listing_url_list in start_urls: 
      yield scrapy.Request(listing_url, callback=self.parselisting, dont_filter=True) 

    def parselisting(self, response): 
     ResultsDict = scraper1Item() 
     Select = Selector(response) 
     ResultsDict['absolute_pos'] = Select.xpath(absolute_pos).extract() 
     ResultsDict['listing_url'] = response.url 
     return ResultsDict 
+1

'self.start_urls'? –

답변

2

당신은 당신의 start_requests() 방법을 수정해야합니다 : 당신은 루프 변수로 listing_url 대신 listing_url_list를 사용하는 의미

  • 가 대신 start_urls
  • listing_url_list를 사용하는 의미
  • 인스턴스화 할 필요가 없습니다 Selector - response.xpath() shortcut을 직접 사용

고정 버전 : 보조 노트로

def parse(self, response): 
    listing_url_list = response.xpath('.//*[@id="xpath"]/li/div/a/@href').extract() 
    for listing_url in listing_url_list: 
     yield scrapy.Request(listing_url, callback=self.parselisting, dont_filter=True) 

, 난 당신이 CrawlSpider을 필요로하지 않으며, 당신이 실제로 링크 추출기와 rules를 사용하지 않기 때문에 실제로 일반 scrapy.Spider를 사용할 수 있다고 생각합니다.

+0

응답 사용에 대한 좋은 정보를 알고 있습니다. 선택기 (응답) 대? – Winklevoss333

+1

@ Winklevoss333에는 내가 게시 한 링크보다 더 좋은 것이 없습니다. 문서 페이지에는 여러 가지 예가 들어 있습니다. 희망이 도움이됩니다. – alecxe

2

사용 spider1.start_urls 대신 start_urls의 정의되어 있지 않습니다.

+0

Crap, spider1.start_urls와 self.start_urls는 모두 즉각적인 문제를 해결하지만 listing_url이 정의되지 않은 문제를 발생시킵니다 ... – Winklevoss333

+0

@ Winklevoss333는'listing_url_list'가 아니어야합니까? – Cnly

+0

네, 틀림없이 옳습니다. – Winklevoss333

관련 문제