刮擦图像管道不下载图像



我正在python中运行一个Scrapy spider来从网站上抓取图像。在尝试了一些其他方法之后,我正在尝试实现一个 ImagesPipeline 来执行此操作。

items.py

class NHTSAItem(scrapy.Item):
    image_urls = scrapy.Field()
    images = scrapy.Field()

settings.py:

ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1}
IMAGES_STORE = 'C:UsersmeDesktop'

myspider.py

def parse_photo_page(self, response):
    item = NHTSAItem()
    for sel in response.xpath('//table[@id="tblData"]/tr'):
        url = sel.xpath('td/font/a/@href').extract()
        table_fields = sel.xpath('td/font/text()').extract()
        if url:
            base_url_photo = "http://www-nrd.nhtsa.dot.gov"
            full_url = base_url_photo + url[0]
            if not item:
                item['image_urls'] = [full_url]
            else: 
                item['image_urls'].append(full_url)
    return item

没有出现任何错误,图像只是没有被下载。调试器甚至说"已刮" 这是日志:

DEBUG: Scraped from <200 http://www-nrd.nhtsa.dot.gov/database/VSR/veh/../SearchMedia.aspx?database=v&tstno=4000&mediatype=p&p_tstno=4000>
{'image_urls': [u'http://www-nrd.nhtsa.dot.gov/database/MEDIA/GetMedia.aspx?tstno=4000&index=1&database=V&type=P',
            u'http://www-nrd.nhtsa.dot.gov/database/MEDIA/GetMedia.aspx?tstno=4000&index=2&database=V&type=P',
            u'http://www-nrd.nhtsa.dot.gov/database/MEDIA/GetMedia.aspx?tstno=4000&index=3&database=V&type=P',
            u'http://www-nrd.nhtsa.dot.gov/database/MEDIA/GetMedia.aspx?tstno=4000&index=4&database=V&type=P',
            u'http://www-nrd.nhtsa.dot.gov/database/MEDIA/GetMedia.aspx?tstno=4000&index=5&database=V&type=P']}

我不在乎扩展管道(创建自定义管道),默认的图像管道很好。图像无处可寻。知道我做错了什么吗?

这是从这个平行问题中得出的解决方案: 刮擦:重试图像下载后出现错误 10054(感谢@neverlastn)

只是将此代码片段添加到我的实际 spider.py 文件中。

custom_settings = {
    "ITEM_PIPELINES": {'scrapy.pipelines.images.ImagesPipeline': 1},
    "IMAGES_STORE": saveLocation
}

我认为它没有正确引用我的 settings.py 文件,因此没有激活图像管道。我不确定如何让它准确地引用我的设置文件,但这个解决方案对我来说已经足够了!

如果您按照 https://docs.scrapy.org/en/latest/topics/media-pipeline.html 中所述应用了所有过程

您必须申请的最后一件事是安装Pillow库。

这是在Scrapy中正确下载图像的5个步骤:

1-定义image_urls并在items.pyimages字段

 image_urls = scrapy.Field()
 images = scrapy.Field()

2-文件内的活动刮擦图像管道settings.py

ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1}

3-在文件中设置图像下载文件夹路径settings.py

IMAGES_STORE = 'path_to_your_folder'

4-安装枕头库:

pip install pillow

5-在您的蜘蛛文件中,将图像URL分配给项目image_urls字段:

item = SpiderItem()
item['image_urls'] = ['set_images_urls_here']
# do other stuff if needed....
yield item

当您按照这5个步骤操作时,您将成功下载带有Scrapy的图像

尝试替换您的settings.py

IMAGES_STORE = 'C:UsersmeDesktop'

跟:

IMAGES_STORE = import os
IMAGES_STORE = os.getcwd()

如果它有效,则绝对路径的格式有问题。那么其中任何一个都应该有效:

IMAGES_STORE = 'C:\Users\me\Desktop'

IMAGES_STORE = 'C:/Users/me/Desktop'

附言这是settings.py.来自其他问题/答案的相对 XPaths 问题也适用于此处。

最新更新