Python Scrapy 使用隧道代理IP爬取数据

隧道代理只需要在代码中设置好固定的IP和端口号,以后的每个请求转发代理都会自动更换一个新的IP,不需要在代码中做循环提取。

隧道代理需要有 IP:PORT格式。酷鱼代理的隧道代理可以不用用户名密码认证,用户中心添加白名单IP即可。

IP:PORTtunnel.kuyukuyu.com:16000
用户名123
密码123

 

剩下的就是在middlewares.py中设置上面的代理IP,然后在settings.py里面调用相应的类就可以了。

第一步,编辑middlewares.py,添加如下类:

import base64
import requests;
import time;
import threading;
import urllib3;
 
class IpProxyDownloadMiddleware(object):
    '''
    独享代理ip的应用方法,需要解码
    '''
    def process_request(self, request, spider):
 
        #消除关闭证书验证的警告
        urllib3.disable_warnings();
 
        #设置代理
        proxy = 'ip:端口'
        user_password = '用户名:密码'
        request.meta['proxy'] = proxy
        b64_user_password = base64.b64encode(user_password.encode('utf-8'))

 

第二步,在settings中设置开启自定义的下载中间件:

DOWNLOADER_MIDDLEWARES = {
   'scrapy.contrib.downloadermiddleware.IpProxyDownloadMiddleware': 543, # 543是权重值
}

 

第三步,开始采集:

import scrapy
import json
 
class IpSpiderSpider(scrapy.Spider):
    name = 'ip_spider'
    allowed_domains = ['http_bin.org']
    start_urls = ['http://http_bin.org/ip']
 
    def parse(self, response):
        origin = json.loads(response.text)['origin']
        print('=='*20)
        print(origin)
        print('=='*20)
        yield scrapy.Request(self.start_urls[0],dont_filter=True

 

然后启动Scrapy就可以了,输出的结果就是隧道代理的IP,而且每个请求都会自动切换新IP。。

发布时间:2021-07-05

在线客服