将 Scrapy 代理设置载入 CrawlerProcess 脚本
当独立启动脚本需要与 scrapy crawl 使用相同的下载器中间件时,把 get_project_settings() 传给 CrawlerProcess。
在 scrapy crawl 下爬虫可以使用预期的代理,而由 Python 脚本启动时却会直接连接。在更改代理服务器之前,先检查该脚本如何构建自己的设置。
对于现有的 Scrapy 项目及其已注册的爬虫:
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
settings = get_project_settings()
process = CrawlerProcess(settings=settings)
process.crawl('catalog')
process.start()
把 catalog 替换为项目的爬虫名称。项目必须能通过其 scrapy.cfg 被发现,或通过一个指向可导入设置模块且正确设置的 SCRAPY_SETTINGS_MODULE 被发现。
仅构造 CrawlerProcess() 并不会仅仅因为脚本还导入了爬虫类就导入项目的设置文件。因此,由 DOWNLOADER_MIDDLEWARES 启用的自定义中间件可能在该次运行中缺失。
加载设置会提供已配置的组件;它不会凭空产生代理地址。Scrapy 的 HTTP 代理中间件仍然需要其常规的环境代理,或显式的 request.meta['proxy'] 值。检查 HTTPPROXY_ENABLED 是否没有将其禁用。对于获准的公开页面抓取,HTTP 代理列表可提供通过这些元数据或环境传入的 HTTP 代理值候选。
将启动脚本加载的设置和生效的中间件与命令行运行结果进行比较。如果二者一致,再继续检查所选请求的代理元数据和实际的传输错误。