Python 刮擦管道错误无法导入名称
我是python编程和使用scrapy的新手。我已经安装了我的爬虫程序,到目前为止它一直在工作,直到我想知道如何下载图像。我得到的错误是无法导入名称管道。我不知道我做错了什么,我不理解一些文档,因为我是新来的。请帮忙 项目文件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()
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