我知道如何使用随机(假)用户代理在scrapy。但在我运行scrapy。我可以看到只有一个随机用户代理在终端上。所以我猜可能'settings.py'只运行一次,当我运行scrapy。如果scrapy的工作真的像这样,并发送1000个请求到一些网页收集1000数据,scrapy将只是发送相同的用户代理。当然,它可以很容易得到禁令,我想。
你能告诉我,我如何发送随机用户代理,当scrappy发送请求到一些网站?
我在我的scrapy项目中使用了这个库(?)。在我在settings.py
中设置faker
之后
第一个
在settings.py我这样写的。它能很好地工作吗?
1条答案
按热度按时间1bqhqjot1#
如果你在你的
settings.py
中设置USER_AGENT
,就像你的问题一样,那么你将只得到一个(随机)用户代理,用于你的整个爬行。如果您想为每个请求设置一个假用户代理,您有几个选择。
选项1:按请求显式设置User-Agent
这种方法涉及到直接在
Request
的头文件中设置user-agent
。在spider代码中,你可以像上面一样导入Faker
,但是在每个Request
上调用fake.chrome()
。例如选项2:编写一个中间件来自动执行此操作
我不想深入讨论这个问题,因为您还可以使用已经存在的方法
选项3:使用现有的中间件自动执行此操作(如
scrapy-fake-useragent
)如果你的代码中有很多请求,选项1就不太好了,所以你可以使用
Middleware
来完成。一旦你安装了scrapy-fake-useragent
,你就可以按照网页上的描述在你的设置文件中设置它使用这个函数,你将得到每个
Request
的一个新的user-agent
,如果Request
失败了,你也将得到一个新的随机的user-agent
。设置这个函数的关键部分之一是FAKEUSERAGENT_PROVIDERS
。它告诉我们从哪里得到User-Agent
。它们按照定义的顺序被尝试。因此,如果第一个提供程序由于某种原因失败(如果获取用户代理失败,而不是Request
失败),则将尝试第二个提供程序。还有其他的配置选项(比如使用随机的chrome类用户代理,在
scrapy-fake-useragent
文档中列出)。蜘蛛示例
下面是一个spider示例。为了方便起见,我在spider内部设置了这些设置,但您可以将这些设置放入您的
settings.py
文件中。如果我用
scrapy runspider fake_user_agents.py --nolog
运行这个函数,输出为