在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,
}

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

原文地址:https://www.cnblogs.com/YYQ-4414/p/14429009.html