天天看點

【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')

           

繼續閱讀