2013-07-26 4 views
0

Я новичок в программировании на питоне и использую scrapy. Я установил свой сканер и до сих пор работал до тех пор, пока не дошел до того, что хотел выяснить, как загружать изображения. Ошибка, которую я получаю, не может импортировать имя NsiscrapePipeline. Я не знаю, что я делаю неправильно, и я не понимаю часть документации, поскольку я новичок. Пожалуйста, помогитеОшибка трассировки конвейера не может импортировать имя

Items Файл

from scrapy.item import Item, Field 

class NsiscrapeItem(Item): 
    # define the fields for your item here like: 
    # name = Field() 
    location = Field() 
    stock_number = Field() 
    year = Field() 
    manufacturer = Field() 
    model = Field() 
    length = Field() 
    price = Field() 
    status = Field() 
    url = Field() 

    pass 

Паук

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from NSIscrape.items import NsiscrapeItem 
from scrapy.http import Request 
from scrapy.contrib.pipeline.images import NsiscrapePipeline 
import Image 

class NsiscrapeSpider(BaseSpider): 
    name = "Nsiscrape" 
    allowed_domain = ["yachtauctions.com"] 
    start_urls = [ 
    "http://www.yachtauctions.com/inventory/" 
    ] 

    def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    sites = hxs.select('//tr') 
    items = [] 
    for site in sites: 
    item = NsiscrapeItem() 
    item['location'] = site.select('td[2]/text()').extract() 
    item['stock_number'] = site.select('td[3]/a/text()').extract() 
    item['year'] = site.select('td[4]/text()').extract() 
    item['manufacturer'] = site.select('td[5]/text()').extract() 
    item['model'] = site.select('td[6]/text()').extract() 
    item['length'] = site.select('td[7]/text()').extract() 
    item['price'] = site.select('td[8]/text()').extract() 
    item['status'] = site.select('td[10]/img/@src').extract() 
    item['url'] = site.select('td[1]/a/@href').extract() 
    item['image_urls'] = site.select('td/a[3]/img/@data-original').extract() 
     item['images'] = item['image_urls'] 
     yield Request(item['url'][0], meta={'item':item}, callback=self.product_detail_page) 


    def product_detail_page(self, response): 
    hxs = HtmlXPathSelector(response) 
    item = response.request.meta['item'] 
    #add all images url in the item['image_urls'] 
    yield item 

настройки

ITEM_PIPELINES = ['scrapy.contrib.pipeline.image.NsiscrapePipeline'] 
IMAGES_STORE = 'c:\Python27\NSIscrape\IMG' 
IMAGES_EXPIRES = 90 

Трубопроводы Это где я не уверен, если я что-то

from scrapy.item import Item 

class NsiscrapePipeline(Item): 
image_urls = Field() 
    images = Field() 

    def process_item(self, item, spider): 
     return item 
отсутствует

ошибка

File "NSIscrape\spiders\NSI_Spider.py", line 9, in <module> 
from scrapy.contrib.pipeline.images import NsiscrapePipeline 
ImportError: cannot import name NsiscrapePipeline 
+0

является пауком так же, как NSI_Spider? –

+0

Да, это то же самое –

ответ

0

Heres мой последний код, который работает. Было два вопроса

1: я пропускал вторые обратный косые черты, что needede быть в запросе -> // TD [1]/с [3]/IMG/@ данные-оригиналом

2: Мне пришлось проверить полный URL-адрес, в котором будет отображаться изображение, и объединить их вместе, который был основным URL-адресом или разрешенным URL-адресом и URL-адресом изображения.

def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    images = hxs.select('//tr') 
    url = [] 
    for image in images: 
     urls = NsiscrapeItem() 
     urls['image_urls'] = ["http://www.yachtauctions.com" + x for x in image.select('//td[1]/a[3]/img/@data-original').extract()] 
     url.append(urls) 
    return url 
0

Это не является частью библиотеки :) - по крайней мере, глядя на их текущий master branch

Я думаю, что вы ищете ImagesPipeline

их пример может помочь ! example

p.s. Я не думаю, что вы настраиваете имя класса - по крайней мере, не по тому, как scapy разработан; я уверен, что вы используете их класс;)


+0

Спасибо, что именно моя проблема была. –

+0

Я получаю новую ошибку теперь, если бы вы узнали почему? raise TypeError ('Request url должен быть str или unicode, got% s:'% type (url) .__ name__) exceptions.TypeError: Request url должен быть str или unicode, получил список: –

+0

Вы, скорее всего, попытались указать список строки для того, что сгенерировало это. как вы пытались ввести ['http://stuff.com'] в хром, например, и он запутался, потому что он не знает, что делать с этим –

0

Вы пытались передать список, но эта функция принимает только строку. Передайте только один элемент из списка (например, list [0]).

+0

@ Я изменил свой код на Request (['url'] [0], и я получаю следующую ошибку: raise ValueError ('Отсутствует схема в запросе url:% s'% self._url) exceptions.ValueError: Отсутствует схема в запросе url: url.Я не понимаю, что это значит, и я попытался изменить код на элемент [0], 'url' [0] и даже изменить индексный номер от 0 до 1 или 2, но этот метод дал мне ошибку индекса. –

+0

Я предполагаю, что мой реальный вопрос - как это передать? –

+0

Не могли бы вы показать мне, какая строка вызывает такое исключение? – solusipse

Смежные вопросы