在已部署的 Scrapy 项目中包含并加载代理列表
将 Scrapy 代理列表资源包含到分发包中,并按包位置而不是已部署的工作目录来加载它。
开发检出目录旁的代理文件不会自动出现在爬虫已部署的包中。有两件事:把字节包含进分发包,然后在已安装的包中找到它们。
对于 Python 包内含 crawl_app/resources/proxies.txt 的 Setuptools 项目,pyproject.toml 条目可以把它包含进来:
[tool.setuptools.package-data]
crawl_app = ["resources/*.txt"]
将其与项目现有的包配置合并。不同的构建后端有自己的数据包含接口。
对于能够使用端点字符串的中间件,Python 3.11+ 可以直接读取包资源:
from importlib.resources import files
text = files('crawl_app').joinpath('resources', 'proxies.txt').read_text(
encoding='utf-8'
)
proxy_urls = [line.strip() for line in text.splitlines() if line.strip()]
使用实际的包名,并在读取器中校验预期的 URL 格式。对于可分发的公开端点数据,请使用免费代理列表中符合中间件预期协议和 URL 格式的地址。这种查找不依赖部署的当前工作目录。
第三方 PROXY_LIST 设置可能要求文件系统路径而不是这些字符串。为该接口使用 importlib.resources.as_file 时,只要中间件还需要提取出的文件,就应保持其上下文打开。上下文关闭后返回临时路径可能会丢失该资源。
将带有凭据的生产列表保存在部署所指定的机密或配置存储中。包数据适合可分发的端点数据,而不能假设与代码一起打包的所有内容都保持私有。