Scrapy进阶使用中间件
Advanced Scrapy use Middleware
我想开发许多中间件以确保网站能够被解析。
这是我认为的工作流程:
- 首先尝试使用 TOR + Polipo
- 如果出现 2 个 HTTP 错误,请尝试不使用 TOR(以便网站知道我的 IP)
- 如果出现 2 个 HTTP 错误,请尝试使用代理(使用我的其他服务器之一进行 HTTP REQ)
- 如果出现 2 个 HTTP 错误,请尝试使用随机代理(在 100 个列表中)。这是重复5次
- 如果 none 有效,我将信息保存在 ElasticSearch 数据库中,以便在我的控制面板上查看
我将创建一个自定义中间件,其 process_request 函数包含所有这 5 个方法。但我没有找到如何保存连接类型(例如,如果 TOR 不起作用,但直接连接是的,我想将此设置用于我的所有其他废料,用于同一网站)。如何保存此设置?
其他人认为,我有一个下载项目图像的管道。是否有使用此中间件(最好是保存设置)的解决方案?
在此先感谢您的帮助。
我认为您可以使用 retry middleware 作为起点:
您可以使用 request.meta["proxy_method"]
来跟踪您使用的是哪一个
您可以重复使用 request.meta["retry_times"]
以跟踪您重试给定方法的次数,然后在更改代理方法时将值设置为零。
您可以使用request.meta["proxy"]
通过现有的 HTTP 代理中间件使用您想要的代理服务器。您可能想要调整中间件的顺序,以便重试中间件在代理中间件之前运行。
我想开发许多中间件以确保网站能够被解析。 这是我认为的工作流程:
- 首先尝试使用 TOR + Polipo
- 如果出现 2 个 HTTP 错误,请尝试不使用 TOR(以便网站知道我的 IP)
- 如果出现 2 个 HTTP 错误,请尝试使用代理(使用我的其他服务器之一进行 HTTP REQ)
- 如果出现 2 个 HTTP 错误,请尝试使用随机代理(在 100 个列表中)。这是重复5次
- 如果 none 有效,我将信息保存在 ElasticSearch 数据库中,以便在我的控制面板上查看
我将创建一个自定义中间件,其 process_request 函数包含所有这 5 个方法。但我没有找到如何保存连接类型(例如,如果 TOR 不起作用,但直接连接是的,我想将此设置用于我的所有其他废料,用于同一网站)。如何保存此设置?
其他人认为,我有一个下载项目图像的管道。是否有使用此中间件(最好是保存设置)的解决方案?
在此先感谢您的帮助。
我认为您可以使用 retry middleware 作为起点:
您可以使用
request.meta["proxy_method"]
来跟踪您使用的是哪一个您可以重复使用
request.meta["retry_times"]
以跟踪您重试给定方法的次数,然后在更改代理方法时将值设置为零。您可以使用
request.meta["proxy"]
通过现有的 HTTP 代理中间件使用您想要的代理服务器。您可能想要调整中间件的顺序,以便重试中间件在代理中间件之前运行。