我想将爬网的所有下载图像保存在一个特定的文件夹中,这样我就可以同时在同一项目中运行多个蜘蛛,而无需将多个爬网的所有图像都放在一个文件夹中。
img文件夹目标在设置中定义:
project_dir = os.path.dirname(__file__)+'/../' #<-- absolute dir the script is in
IMAGES_STORE = project_dir+"images"
我的蜘蛛在spidername.py中有一个这样的类:
class GetbidSpider(CrawlSpider):
name = 'test_spider'
我的图像管道如下所示:
class MyImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for image_url in item['image_urls']:
yield scrapy.Request(image_url)
def item_completed(self, results, item, info):
image_paths = [x['path'] for ok, x in results if ok]
if not image_paths:
raise DropItem("Item contains no images")
item['image_paths'] = image_paths
return item
如何在设置中访问当前蜘蛛的名称以创建动态图像下载文件夹?
答案 0 :(得分:2)
一种方法是覆盖ImagesPipeline
,更具体的是image_downloaded
方法,这样您就可以利用从搜寻器获得的内容来做任何您想做的事情。
现在,我假设您想在每次运行Spider时都更改该设置变量,因此您不必每次都在运行它之前就四处寻找并更改设置。
每次运行时更改设置的一种替代方法是将其作为爬网参数传递:
scrapy crawl test_spider -s IMAGES_STORE=test_spider
另一种方法是在代码中为每个蜘蛛设置custom_settings
上:
class GetbidSpider(CrawlSpider):
name = 'test_spider'
custom_settings = {
'IMAGES_STORE': 'test_spider',
}
然后正常运行蜘蛛:
scrapy crawl test_spider