基于输入的Python动态模块加载

时间:2010-02-01 22:27:28

标签: python web-scraping

我写了一个程序,它接受一个部分rss feed并输出一个完整的,但它是一个个案的基础。一个站点的配方与另一个站点的配方不同。所以我要做的是查看域名basename(例如nyt或wsj)并根据它选择一个模块。虽然我需要事先加载每个模块,并为每个配方提供逻辑条件。

我需要的是一种方法,只需将各个模块放在各自的文件夹中,当我解析url basename时,我希望它查找模块,加载它并采取一些操作。所以我希望主代码库独立于模块。我希望将来能够添加模块,并且永远不会触及与它们交互的代码部分。

这是一个代码示例

if "nyt" == feed:
        nyt.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)

如您所见,我调用了单个模块的解析器。我有很多这些基于每个网站。我想要reed feed然后能够查找模块,加载并调用它,然后如果它不存在则报告它并尝试默认方法。

2 个答案:

答案 0 :(得分:3)

听起来你正在寻找__import__功能。此函数与import语句执行相同的操作,但允许您传递名称以进行导入,该名称可能仅在运行时已知。

所以你可以这样做:

parsemodule = __import__(feed)
parsemodule.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)

您需要捕获ImportError

等异常

答案 1 :(得分:1)

您可以使用imp module