• 在scrapy框架中使用免费的代理ip,解决ip被封禁的问题!!!


    本文仅供学习与交流,切勿用于非法用途!!!

    该项目的实现,主要基于视频 https://www.bilibili.com/video/BV1qt411H7ox?t=633 的基础上来实现的(当然也有找其他的视频等资料),这里对阳光问政发起数据请求,让其将本机ip禁掉:

    这是可以正常打开阳光问政的网页:

    这是对阳光问政发起数据请求,让其将本机ip禁掉:

    使用免费的代码ip的对阳光问政发起数据请求:

    打开scrapy项目里面的中间件middlewares.py,只保留下面的类里面的3个函数其他的删除掉

    class '自己工程项目的名字'DownloaderMiddleware:
    
        def process_request(self, request, spider):
    
            return None
    
        def process_response(self, request, response, spider):
    
            return response
    
        def process_exception(self, request, exception, spider):
    
            return request
    
    
    
    

    实现在scrapy框架中使用免费的代理ip,解决ip被封禁的问题代码:

    这里使用requests请求解析免费代理ip网站的ip来使用,

    
    import random
    import requests
    from lxml import etree
    
    class '自己工程项目的名字'DownloaderMiddleware:
    
        headers = {
            "Connection": 'close',
            "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52',
        } #ua伪装
    
        def __init__(self):#初始化函数
    
            self.url = '免费代理ip的网站url'
            self.proxy = '' #把proxy 定义为空,来保存免费的代理ip
            self._get_proxy()
    
        def _get_proxy(self): #获取免费的代理ip
    
            response = requests.get(self.url,headers=self.headers)
            response.encoding = 'utf-8'
            page_text = response.text
    
            tbody = etree.HTML(page_text) #这里是基于我的免费代理ip网站做的代理ip数据解析,这个要按照自己的免费代理ip网站来,这里仅供参考
            tbody_tr = tbody.xpath('//div[@class="item"]//p/text()')
            _proxy = []#存放免费代理ip
            for proxy in tbody_tr:
                ip_port = proxy.split("@")[0].replace(' ', '') #对免费代理ip的网站进行数据解析处理,提取出代理ip
                _proxy.append(ip_port)#把解析抓取到的免费代理ip都放在_proxy列表里面
    
            self.proxy = random.choice(_proxy) #使用random.choice(_proxy)把_proxy列表里面的免费代理随机抽取赋给self.proxy
    
    
        def process_request(self, request, spider):
            #request.meta['proxy'] = 'http://ip:prot' 这个是设置代理ip的形式
            request.meta['proxy'] = 'http://' + self.proxy  #因为_proxy列表里面的免费代理只有ip和prot没有'http://',所以要在这里要加上
            return None
    
        def process_response(self, request, response, spider):
    
            return response
    
        def process_exception(self, request, exception, spider):
    
            return request
    
    

    写好上面这部分的代码后,在配置文件settings.py里面开启中间件:

    DOWNLOADER_MIDDLEWARES = {
       ''自己工程项目的名字'.middlewares.'自己工程项目的名字'DownloaderMiddleware': 543,
    }
    
    

    本文可以借鉴学习,切勿照搬,根据自己分析的实际情况实现项目!!!

  • 相关阅读:
    CF1312G Autocompletion
    UOJ#11. 【UTR #1】ydc的大树
    CF51F Caterpillar
    CF295D Greg and Caves
    CF288E Polo the Penguin and Lucky Numbers
    CF401D Roman and Numbers
    CF543D Road Improvement
    CF938F Erasing Substrings
    [AGC024E] Sequence Growing Hard
    CF261D Maxim and Increasing Subsequence
  • 原文地址:https://www.cnblogs.com/YYQ-4414/p/14429009.html
Copyright © 2020-2023  润新知