【Python爬虫】 scrapy框架 添加IP代理池 反反爬

    国内的免费IP代理网站参考:

                    http://www.xicidaili.com/wt           

                    https://www.kuaidaili.com/free/

                    http://www.youdaili.net/Daili/guonei/   

                    http://ip.zdaye.com/FreeIPlist.html

一 丶 通过中间件添加代理池

       在中间件 middlewares.py 中 添加一个 代理 类

import random
from proxy1.settings import IPPOOL


class ProxychiMiddleware(object):
     # 定义一个请求之前的方法
     def process_request(self, request, spider):
              # 如果是 私密代理
              # request.meta['proxy'] = 'https://用户名and密码114.212.12.4:3128'    
              # 随即获取一个代理
              this_ip = random.choice(IPPOOL)
              request.meta['proxy'] = 'HTTP://'+this_ip

              return None

       在 setting.py 中 启用  middlewares.py 中的 代理类

             (代理池中的IP地址, 应该已经不能用了,  各位小伙伴们 可以去一下IP代理网站中找新的 )

DOWNLOADER_MIDDLEWARES = {
         #  启用的类名 要和  中间件中的类名一致
         'movie.middlewares.ProxychiMiddleware': 543,
}

# 定义一个代理池
IPPOOL=[
        {"ipaddr":"123.55.1.75:30325"},
        {"ipaddr":"220.184.213.12:6666"},
        {"ipaddr":"171.38.85.82:8123"},
        {"ipaddr":"111.121.193.214:3128"},
        {"ipaddr":"58.48.193.180:3128"},
        {"ipaddr":"171.37.29.26:9797"},
        {"ipaddr":"119.188.162.165:8081"}
]

二  ,  重写 start_requests方法   :


import scrapy
import random
# 设置一个代理池
proxy_pool = [{'HTTP':'111.155.116.215:8123'}]
class ProxydemoSpider(scrapy.Spider):
    name = 'proxydemo'
    allowed_domains = ['www.baidu.com']
    start_urls = ['http://www.baidu.com/']

    def start_requests(self):
        for url in self.start_urls:
            proxy_addr = random.choice(proxy_pool)  # 随机选一个
            yield scrapy.Request(url=url, callback=self.parse, meta={'proxy': proxy_addr})  # 通过meta参数添加代理

    def parse(self, response):
            print('proxy simida')

猜你喜欢

转载自blog.csdn.net/bmx_rikes/article/details/82418124