Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 刮擦管道错误无法导入名称_Python_Scrapy - Fatal编程技术网

Python 刮擦管道错误无法导入名称

Python 刮擦管道错误无法导入名称,python,scrapy,Python,Scrapy,我是python编程和使用scrapy的新手。我已经安装了我的爬虫程序,到目前为止它一直在工作,直到我想知道如何下载图像。我得到的错误是无法导入名称管道。我不知道我做错了什么,我不理解一些文档,因为我是新来的。请帮忙 项目文件 from scrapy.item import Item, Field class NsiscrapeItem(Item): # define the fields for your item here like: # name = Field()

我是python编程和使用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
错误

文件“nsisrape\Spider\NSI_Spider.py”,第9行,在
从scrapy.contrib.pipeline.images导入管道
ImportError:无法导入名称管道

这不是库的一部分:)-至少通过查看它们当前的

我想你在找
ImagesPipeline

他们的榜样可能会有所帮助

p、 我不认为你定制了这个类的名字——至少不是根据scapy的设计;我有理由相信你使用了他们的课程;)



您试图传递列表,但此函数只接受字符串。只传递列表中的一个元素(例如列表[0])。

这是我的最终代码。有两个问题

1:请求中缺少第二个反斜杠-->//td[1]/a[3]/img/@data original

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

spider和NSI_spider一样吗?谢谢,这正是我的问题所在。我现在遇到了一个新错误,你知道为什么吗?raise TypeError('请求url必须是str或unicode,获取%s:'%type(url)。\uuuu name\uuuu)异常。TypeError:请求url必须是str或unicode,获取列表:嗯,您试图为生成该url的内容提供列表而不是字符串。例如,你试图在chrome中键入['url],但它被弄糊涂了,因为它不知道该怎么做。我该如何给它一个字符串?我的意思是,它是我从项目['url'中获取的不止一个url。这就是问题所在吗?它可能只需要url?很抱歉,我没有函数的上下文。其中一些函数使用get或post args I等参数think@I已将我的代码更改为请求(['url'][0],我收到以下错误:raise VALUERROR('请求url中缺少方案:%s'%self.\u url)exceptions.ValueError:请求url:url中缺少方案。我不明白这意味着什么,我尝试将代码更改为项[0],“url”[0],甚至将索引号从0更改为1或2,但该方法给了我一个索引错误。我想我真正的问题是如何传递它?我刚刚发现它来自这一行:项['images']=site.select('td/a[3]/img/@data original').extract()我想我遗漏了什么。@solusipseh是准确的错误文件“C:\python27\lib\site packages\scrapy-0.16.2-py2.7.egg\scrapy\http\request\u init\u.py”,第61行,在_set\u url raise ValueError中('request url中缺少方案:%s'%self.\u url)exceptions.ValueError:请求url中缺少方案:/images/photos/8940/wide_8940__0.jpg@solusipse
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