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

标签 python web-scraping

我写了一个程序,接收部分 rss 提要并输出完整的,但这是一个个案。一个站点的配方与另一个站点的配方不同。所以我所做的是查看域基本名称(例如 nyt 或 wsj)并根据它选择一个模块。尽管我需要事先加载每个模块,并且每个配方都有一个逻辑条件。

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

这是一个代码示例

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

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

最佳答案

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

所以你可能会这样做:

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

您需要捕获异常,例如 ImportError

关于Python 基于输入的动态模块加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180539/

相关文章:

Php cURL 网页抓取

Python: "FileNotFoundError"在所有子进程调用上

python - 由 += in ternany 引起的无效语法

python - 在 Django 模型中检索列名

html - 使用 XMLHTTP 使用 vba 进行网页抓取

html - BeautifulSoup 中的第 n 个类型 NotImplementedError

python - Non-orm Tastypie 资源流中的请求为 None

python - 为什么 Bottle 不返回列表?

java - Jsoup 未返回 HTML 页面中的所有 div

python - 使用 python 在页面上使用按钮