我的蜘蛛运行没有显示任何错误,但图像不存储在文件夹中这里是我的scrapy文件:
Spider.py:
import scrapy
import re
import os
import urlparse
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.loader.processors import Join, MapCompose, TakeFirst
from scrapy.pipelines.images import ImagesPipeline
from production.items import ProductionItem, ListResidentialItem
class productionSpider(scrapy.Spider):
name = "production"
allowed_domains = ["someurl.com"]
start_urls = [
"someurl.com"
]
def parse(self, response):
for sel in response.xpath('//html/body'):
item = ProductionItem()
img_url = sel.xpath('//a[@data-tealium-id="detail_nav_showphotos"]/@href').extract()[0]
yield scrapy.Request(urlparse.urljoin(response.url, img_url),callback=self.parseBasicListingInfo, meta={'item': item})
def parseBasicListingInfo(item, response):
item = response.request.meta['item']
item = ListResidentialItem()
try:
image_urls = map(unicode.strip,response.xpath('//a[@itemprop="contentUrl"]/@data-href').extract())
item['image_urls'] = [ x for x in image_urls]
except IndexError:
item['image_urls'] = ''
return item
settings.py:
from scrapy.settings.default_settings import ITEM_PIPELINES
from scrapy.pipelines.images import ImagesPipeline
BOT_NAME = 'production'
SPIDER_MODULES = ['production.spiders']
NEWSPIDER_MODULE = 'production.spiders'
DEFAULT_ITEM_CLASS = 'production.items'
ROBOTSTXT_OBEY = True
DEPTH_PRIORITY = 1
IMAGE_STORE = '/images'
CONCURRENT_REQUESTS = 250
DOWNLOAD_DELAY = 2
ITEM_PIPELINES = {
'scrapy.contrib.pipeline.images.ImagesPipeline': 300,
}
items.py
# -*- coding: utf-8 -*-
import scrapy
class ProductionItem(scrapy.Item):
img_url = scrapy.Field()
# ScrapingList Residential & Yield Estate for sale
class ListResidentialItem(scrapy.Item):
image_urls = scrapy.Field()
images = scrapy.Field()
pass
我的管道文件是空的,我不知道我应该添加到pipeline.py文件。
任何帮助都非常感谢。
6条答案
按热度按时间w51jfk4q1#
我的工作最终结果:
spider.py:
设置.py
items.py
管道.py
pxq42qpu2#
由于您不知道在管道中放入什么,我假设您可以使用scrapy提供的默认管道来处理图像,因此在
settings.py
文件中,您可以像下面这样声明此外,您的图像路径是错误的
/
意味着您将进入机器的绝对根路径,因此您可以将绝对路径放置到您想要保存的位置,或者只是从运行爬虫的位置创建相对路径。或
现在,在spider中提取url,但不将其保存到项目中
如果使用默认管道,则字段必须是
image_urls
。现在,在
items.py
文件中,您需要添加以下两个字段(这两个字段都需要使用此字面名称)应该可以
amrnrhlw3#
在我的例子中,是
IMAGES_STORE
路径导致了问题我做了
IMAGES_STORE = 'images'
和它的工作就像一个魅力!下面是完整的代码:
设置:
管线:
azpvetkf4#
只是在这里加上我的错误,让我困惑了几个小时。也许它可以帮助别人。
来自scrapy docs(https://doc.scrapy.org/en/latest/topics/media-pipeline.html#using-the-images-pipeline):
然后,将目标存储设置配置为将用于存储下载的映像的有效值。否则,即使在ITEM_PIPELINES设置中包含管道,管道也将保持禁用状态。
出于某种原因,我使用了冒号“:”而不是等号“=”。
这不会返回一个错误,而是导致管道根本不加载,这对我来说很难解决问题。
8ljdwjyq5#
必须在www.example.com文件中启用SPIDER_MIDDLEWARES和DOWNLOADER_MIDDLEWARESsettings.py
bwntbbo36#
我也遇到了同样的问题,没有任何帮助。在做了以下事情后开始工作: