python动态导入包
在爬虫项目中,有时候一个python包下面包含很多spider.py的文件,每个文件就是一个爬虫,想要在程序运行的时候动态的进行导入,可以使用
importlib
是 Python 中用于动态导入模块的标准库。它提供了一种在运行时动态导入模块和获取导入模块的属性的方法
下面是项目的爬虫目录结构
project/
│
└── spider/
├── __init__.py
├── 1_spider.py
├── 2_spider.py
└── ...
在__init__.py中动态导入所有爬虫
import importlib
import os
def import_spiders():
# 获取当前文件所在目录路径
current_dir = os.path.dirname(__file__)
# 获取当前目录下所有以 'spider.py' 结尾的文件名
spider_files = [file[:-3] for file in os.listdir(current_dir) if file.endswith('spider.py')]
# 动态导入所有爬虫类,并将其添加到一个字典中
spiders_modules = []
for spider_file in spider_files:
module = importlib.import_module(f'.{spider_file}', package=__name__)
spiders_modules.append(module)
return spiders_modules
在main.py中允许爬虫
# 导入所有的爬虫
spider_modules = import_spiders()
for module in spider_modules:
# 这里创建爬虫对象,并允许爬虫
module.Spider().run()