2013-07-26 72 views
0

我是新來的python編程和使用scrapy。我已經安裝了我的抓取工具,到目前爲止它一直在工作,直到我想要弄清楚如何下載圖像。我得到的錯誤是無法導入名稱NsiscrapePipeline。我不知道我在做什麼錯,我不明白一些文件,因爲我是新的。請幫助Scrapy管道錯誤無法導入名稱

項目文件

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

繼承人我的最終代碼多數民衆贊成在工作。有兩個問題

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

我現在正在收到一個新的錯誤,你會碰巧知道爲什麼?引發TypeError('請求URL必須是str或unicode,得到%s:'%type (url).__ name__)exceptions.TypeError:請求URL必須是str或unicode,得到列表: –

+0

uhm您試圖給列表一個字符串的任何生成。例如你試圖在chrome中輸入['http://stuff.com'],因爲它不知道該怎麼做 –

0

您試圖通過列表,但此函數只接受字符串。僅傳遞列表中的一個元素(例如列表[0])。

+0

@我已經將我的代碼更改爲Request(['url'] [0],並且出現以下錯誤:raise ValueError('請求url中丟失的方案:%s'%self._url)exceptions.ValueError:Missing計劃請求url:url。我不明白這是什麼意思,我試圖將代碼更改爲項[0],'網址'[0],甚至將索引號從0更改爲1或2,但該方法給了我一個索引錯誤。 –

+0

我想我真正的問題是我如何通過它? –

+0

你能告訴我哪一行導致這種異常? – solusipse

相關問題