scrapy框架中使用代理 小白亲测有效

在学习爬虫的过程中遇到了这个问题:使用scrapy在爬取数据时怎么使用代理IP?于是去搜索相关资料,最后用这位大神的方法解决了问题:Python scrapy设置代理ip_python的scrapy框架测试用api链接取的ip-CSDN博客

不过最后也是总结以下大佬的方法,发现了更简便的方法

一.设置代理池

我们找到settings.py文件,并在其中创建数组类型的变量PROXIES_LIST,其内容就是候选的代理(建议变量名就用PROXIES_LIST)

PROXIES_LIST = [
    'http://120.83.106.228:9999',
    'https://223.241.78.23:808'
]# 当你看到文章时这些代理可能已经失效

二.在中间件middlewares.py中使用代理

什么是中间件可以去看参考链接,他介绍的比较简明,这里我就不赘述了

首先先导入settings中我们定义的代理池(导入后编译器可能会报错,是因为导入的是本地文件,并非官方库,但不影响运行)

from scrapy_37_proxy.settings import PROXIES_LIST
# scrapy_37_proxy是我的项目名,你需要换成你的项目名

注意:就是这里与参考链接不同,他是自己写了一个类,类中定义了一个方法选择代理IP,然后再settings文件中写一个开关加载这个类;而我发现在中间件中本身就有这个方法,我们不用重写这个方法了,直接改就行

此方法在middlewares中第二个类中,方法中自带的return None我们删掉,然后写自己的代码,即从代理池中随机挑选一个代理(需要导入random)

import random
    
def process_request(self, request, spider):
        # Called for each request that goes through the downloader
        # middleware.

        # Must either:
        # - return None: continue processing this request
        # - or return a Response object
        # - or return a Request object
        # - or raise IgnoreRequest: process_exception() methods of
        #   installed downloader middleware will be called
        # return None
        request.meta['proxy'] = random.choice(PROXIES_LIST)

三.在settings.py中打开开关

所谓开关起始就是控制我们刚写的代码是否执行的代码,注释掉就是关,不注释就是开

开关就是这行代码

DOWNLOADER_MIDDLEWARES = {
   "scrapy_37_proxy.middlewares.Scrapy37ProxyDownloaderMiddleware": 543,
}# 默认是关闭状态,即此代码默认是被注释掉的,我们给他打开

运行即可,这样的话我们也不用再自己写一个开关了

我测试IP是否发生改变用的网址是这个,非常简洁且有效互连协议查询 - IP查询 - 查IP(www.cip.cc)

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值