Python Scrapy是配置scraper的常用方法

2024-10-04 05:26:54 发布

您现在位置:Python中文网/ 问答频道 /正文

Python框架Scrapy工作得很好,但我不知道如何在运行时配置spider。似乎所有的配置都应该是“静态”的,这并不方便。糟糕的设计还是我错过了什么

例如,我有一个spider,它需要困难的初始化例程。 我使用自己的脚本获取用于爬行的HTTP头(cookies、用户代理等)——因为它是登录到用户中的。 这需要一到两分钟。之后,这些头应该应用于所有请求

现在,我在spider的__init__方法中这样做。但是我不能从spider的构造函数设置User-Agentcustom_settings必须设置为类变量。因此,我必须使用中间件为每个请求设置用户代理。这是一个丑陋的解决方案

我们是否有一些共同的模式来初始化spider——某种spider factory?Smth是这样的:

class SpiderConfigurator:

    def __init__():
        ...


    def configureSpider(spider, environment):
        ...
        spider.setMyCustomSettings(arg1, arg2)
        ...
        environment.setMyCustomSettings(argName1, argValue1)
        environment.setMyCustomSettings('User-Agent', 'my value')

Tags: 用户脚本框架http代理environmentinitdef
1条回答
网友
1楼 · 发布于 2024-10-04 05:26:54

Scrapy允许从脚本中拖拽:Run Scrapy from script感谢@paultrmbrth的提示

但是我们不能初始化spider-我们只是将spider类传递给Crawler实例,然后crawler实例化对象。我们能做的是——为spider的构造函数传递参数。Smth是这样的:

os.chdir(scrapyDir)
projectSettings = get_project_settings()
crawlerProcess = CrawlerProcess(projectSettings)
crawlerProcess.crawl(SpiderCls,
                     argumentName1=argumentValue1,
                     argumentName2=argumentValue2)

参数argumentName1argumentName2将传递给spider的构造函数

相关问题 更多 >