我正在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.py
内images
字段
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 问题也适用于此处。