2017-10-15 2 views
2

Ich befolge dieses Tutorial https://www.practicalecommerce.com/Monitor-Competitor-Prices-with-Python-and-Scrapy genau wie gesagt, Schritt für Schritt, aber wenn ich zu dem Teil komme, wo ich die Spinne mit dem laufen Befehl:Scrapy Projekt Fehler: "undefined Variable", wenn ich tatsächlich diese Variable definiert habe

scrapy crawl massEffect -o results.csv

es zeigt diesen Fehler:

NameError: global name 'TfawItem' is not defined

Was mache ich falsch?

Hier ist meine items.py:

# -*- coding: utf-8 -*- 

# Define here the models for your scraped items 
# 
# See documentation in: 
# http://doc.scrapy.org/en/latest/topics/items.html 

import scrapy 


class TfawItem(scrapy.Item): 
    # define the fields for your item here like: 
    # name = scrapy.Field() 
    title = scrapy.Field() 
    price = scrapy.Field() 
    upc = scrapy.Field() 
    url = scrapy.Field() 

mein massEffect.py:

# -*- coding: utf-8 -*- 
import scrapy 


class MasseffectSpider(scrapy.Spider): 
    name = 'massEffect' 
    allowed_domains = ['tfaw.com'] 
    start_urls = [ 
     'http://www.tfaw.com/Companies/Dark-Horse/Series?series_name=Mass+Effect', 
    ] 

    def parse(self, response): 
     for href in response.css('div a.boldlink::attr(href)'): 
      url = response.urljoin(href.extract()) 
      yield scrapy.Request(url, callback=self.parse_detail_page) 

    def parse_detail_page(self, response): 
     comic = TfawItem() 
     comic['title'] = response.css('div.iconistan + b span.blackheader::text').extract() 
     comic['price'] = response.css('span.blackheader ~ span.redheader::text').re('[$]\d+\.\d+') 
     comic['upc'] = response.xpath('/html/body/table[1]/tr/td[4]/table[3]/tr/td/table/tr/td[contains(., "UPC:")]/following-sibling::td[1]/text()').extract() 
     comic['url'] = response.url 
     yield comic 

Und die Hierarchie meines Projekts:

tfaw/ 

    scrapy.cfg 

    results.csv 

    tfaw/ 

     __init__.py 

     __init__.pyc 

     items.py 

     middlewares.py 

     pipelines.py 

     settings.py 

     settings.pyc 

     spiders/ 

      __init__.py 

      __init__.pyc 

      massEffect.py 

      massEffect.pyc 
+0

Klassen und andere Namen aus anderen Dateien (auch Module genannt) müssen in Python explizit importiert werden. –

Antwort

0

Sie importieren nicht TfawItem überall in massEffect.py.

Fügen Sie zum Beispiel from ..items import TfawItem an die Spitze massEffect.py.

+0

Ja, es hat gut funktioniert, danke :) –

0

Sie importieren nicht TfawItem in Ihre massEffect.py Datei. Je nach Ihrer Python-Version können Sie entweder:

from ..items import TfawItem 

oder

from modulename.items import TfawItem 
+0

Fast funktionierte es, als ich zwei Punkte vor 'Items' setzte, aber trotzdem danke für die Antwort: D –

Verwandte Themen