2013-07-26 2 views
0

저는 Python 프로그래밍 및 치료를 처음 사용합니다. 내 크롤러를 설치했고 지금까지 이미지를 다운로드하는 방법을 알아 내려고 노력할 때까지 작동했습니다. 내가 얻는 오류는 이름 NsiscrapePipeline을 가져올 수 없습니다. 나는 내가 무엇을 잘못하고 있는지 알지 못한다. 그리고 나는 새로운 것의 일부 문서를 이해하지 못한다.치료 파이프 라인 오류가 이름을 가져올 수 없습니다.

항목

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 

설정 뭔가

from scrapy.item import Item 

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

    def process_item(self, item, spider): 
     return item 
말이냐하면 내가 확실하지 오전

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

파이프 라인이이 파일 도와주세요 라이브러리 :)의 일부가 아닌

오류

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 : I는 두 번째 요청에있을 needede 슬래시 없어진 -> // TD [1]/A [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

- 적어도보고 자신의 난 당신이 도움이 될 수 ImagesPipeline

이들의 예를 찾고있는 생각 master branch

현재 ! example

p.s. 나는 당신이 클래스 이름을 맞춤 이름으로 생각하지 않는다. 적어도 scapy가 어떻게 설계되었는지는 아니다. 당신은 목록을 전달하는 시도


+0

고맙습니다. 제 문제는 정확히 무엇입니까. –

+0

지금 왜 새로운 오류가 발생 했습니까? raise TypeError ('요청 URL은 str 또는 유니 코드이어야합니다. % type :'% type (url) .__ name__) exceptions.TypeError : 요청 URL은 str 또는 unicode 여야합니다. 목록 : –

+0

uhm 목록을 제공하려고했습니다. 문자열을 생성 한 것이 무엇이든간에. 예를 들어 크롬에 [http://stuff.com]을 입력하려고했는데 무엇을해야할지 모르기 때문에 혼란 스럽습니다 –

0

)하지만,이 기능은 문자열을 받아, 난 당신이 자신의 클래스를 사용하여 합리적으로 확신합니다. 목록에서 하나의 요소 만 전달하십시오 (예 : list [0]).

+0

@ 내 코드를 Request ([ 'url'] [0])로 변경했으며 다음과 같은 오류가 발생했습니다. ValueError를 올리십시오 ('요청 URL에 스킴이 없습니다'% self._url % exceptions.ValueError : Missing 요청 url : url의 스키마.나는 이것이 의미하는 바를 이해하지 못하고 item [0], url [0], 심지어 0에서 1 또는 2로 인덱스 번호를 변경하는 코드를 변경하려고 시도했지만 그 방법은 나에게 인덱스 오류를 주었다. –

+0

내 진짜 질문은 내가 그것을 어떻게 전달하는 것인가? –

+0

어떤 예외가 발생했는지 알려주시겠습니까? – solusipse

관련 문제