scrapy中添加代理ip的两种方式


方法1

在生成Request请求对象的时候,把代理ip以字典的形式传递给meta

# 爬虫.py

class T1Spider(scrapy.Spider):
    name = 't1'
    allowed_domains = ['baidu.com']
    start_urls = ['https://baidu.com/']

    def parse(self, response):
        proxyip = get_ip()  # 这个是获取ip的函数,返回类似 '127.0.0.1:8000'的字符串
        yield scrapy.Request(
            url = 'https://baidu.com/',
            callback= self.p1, # 回调函数
            meta={'proxy':'https://' + proxyip},  # 这个的meta接收的对象需要是个字典
                                                                  # 协议类型需要看请求对应需要的协议头
        )    

 

 

方法2

在中间件的中 process_request 方法中 把代理ip 传递给Request对象的meta属性

#  中间件.py
class
Test1DownloaderMiddleware: def process_request(self, request, spider): # 这个是获取ip的函数,返回类似 '127.0.0.1:8000'的字符串 def get_ip(): '''获取代理ip''' url = 'http://192.168.3.249:9999/api/v1/getIp' return (requests.get(url).json()['ip']) def change_proxy_in_middleware(): '''下载器中间件中设置代理 定义在process_request内部可以直接使用request这个实例对象 ''' ht = (re.search(r'(.*?)://', request.url).group()) # 获取协议类型 proxy_ip = ht + get_ip() # 协议 + ip ---> 代理 request.meta['proxy'] = proxy_ip # 把代理传递给request change_proxy_in_middleware() # 把过程封装在了函数内部,所以这也一定要进行调用 return None

 记得在settings.py中打开中间件


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM