2016-07-09 38 views
2

私はこの質問の他のバージョンを読んだことを約束しましたが、自分の状況に関連するものを見つけることができませんでした。 1つがあれば、私はお詫びします、私は今これを数時間見てきました。Python - グローバル名が定義されていません

私はこれをたくさん手伝ってきましたが、実際には1つのバージョンで結果が得られました。

'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

クラップス、spider1.start_urlsとself.start_urlsの両方がすぐに問題を解決しますが、次にlisting_urlが定義されていない問題が発生します... – Winklevoss333

+0

@ Winklevoss333は 'listing_url_list'ではありませんか? – Cnly

+0

はい、あなたは絶対に正しいです。 – Winklevoss333

関連する問題