python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头

一、整体结构

二、代理IP类的构建(domain.py文件)

‘‘‘
实现_ init_ 方法, 负责初始化,包含如下字段:
ip: 代理的IP地址

port:代理IP的端口号

protocol: 代理IP支持的协议类型,http是0, https是1, https和http都支持是2

nick_ type: 代理IP的匿名程度,高匿:0,匿名: 1,透明:2

speed:代理IP的响应速度,单位s

area:代理IP所在地区

score:代理IP的评分,用于衡量代理的可用性;默认分值可以通过配置文件进行配置.在进行代理可用性检查的时候,
      每遇到一次请求失败就减1份,减到0的时候从池中删除.如果检查代理可用,就恢复默认分值

disable_domains:不可用域名列表,有些代理IP在某些域名下不可用,但是在其他域名下可用在配置文件:
                settings.py中定义MAX_ _SCORE = 50,表示代理IP的默认最高分数提供_ _str__方法, 返回数据字符串

‘‘‘
from settings import MAX_SCORE
#从settings模块中导入MAX_SCORE变量,这个变量的意思就是给每一个IP一个分数(分数高代表这个IP可用性强,初始化为MAX_SCORE)
class Proxy(object):

    def __init__(self,ip,port,protocol=-1,nick_type=-1,speed=-1,area=None,score=MAX_SCORE,disable_ip=[]):
        self.ip=ip      #代理ip
        self.port=port  #代理ip端口
        self.protocol=protocol  #代表代理ip的协议类型
        self.nick_type=nick_type  #匿名程度
        self.speed=speed  #代理ip速度
        self.area=area    #代理ip地址
        self.score=score  #ip分数
        self.disable_ip=disable_ip

    def __str__(self):
        return str(self.__dict__) #__dict__ : 类的属性(包含一个字典,由类的数据属性组成)

三、配置文件settings.py

可能有人会疑惑为什么要用配置文件保存变量,这样的话还要在其他模块引入,这不是麻烦吗?

因为后面我们可能还要对它们的某些初始值进行改变,这个时候如果如果不用配置文件方式引入,而是直接写上数字。这个时候改代码太麻烦了

import logging
MAX_SCORE=50  #代理ip初始分数

#下面这一部分是log.py的内容,是用来控制日志文件的
LOG_LEVEL = logging.INFO  #控制日志文件报错级别
‘‘‘
报错级别一共5种(从上到下级别依次递增)
logger.debug("")
logger.info("")
logger.warning("")
logger.error("")
logger.critical("")

如果设置报错级别为INFO,那么就不会报debug的错误
‘‘‘
LOG_FMT = ‘%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s‘  #日志内容格式
LOG_DATEFMT = ‘%Y-%m-%d %H:%M:%S‘  #日志内容的时间部分格式(也就是”年-月-日 时:分:秒“)
LOG_FILENAME = ‘log.log‘   #要把日志文件放在哪,就放在本目录下log.log文件

TEST_TIMEOUT = 5  #这个是requess访问链接设置的超时时间

#因为我把数据放入了mongodb数据库,所以这里配置的是mongodb数据库连接信息
MONGO_URL = ‘mongodb:#127.0.0.1:27017‘  

‘‘‘
这几个是分别爬取几个网站上代理ip的具体爬虫路径
‘‘‘
SPIDERS=[

    ‘IPProxyPool.core.proxy_spider.proxy_spiders.ip66Spider‘,
    ‘IPProxyPool.core.proxy_spider.proxy_spiders.KuaidailiSpider‘,
    ‘IPProxyPool.core.proxy_spider.proxy_spiders.ProxylistplusSpider‘,
    ‘IPProxyPool.core.proxy_spider.proxy_spiders.XiciSpider‘
]
#这个是多长时间爬取一次代理ip来使用
RUN_SPIDERS_INTERVEL = 12
#这个是最多开多少协程来判断ip是否可用
TEST_PROXIES_ASYNC_COUNT = 10
#这个是多少时间更新一次数据库内ip信息,因为代理ip存活时间有限
TEST_PROXIES_INTERVAL = 2

四、日志信息模块log.py

import logging
import sys

class Logger(object):

    def __init__(self):
        self._logger = logging.getLogger()  //得到一个日志处理对象
        #传参数,告诉它写入日志内容格式
        self.formatter = logging.Formatter(fmt=settings.LOG_FMT,datefmt=settings.LOG_DATEFMT)
        #把要写入的日志加入句柄里面,到时候会输出到文件内保存
        self._logger.addHandler(self._get_file_handler(settings.LOG_FILENAME))
        #把要写入的日志加入句柄里面,到时候会输出到控制台查看
        self._logger.addHandler(self._get_console_handler())
        #设置写入日志级别
        self._logger.setLevel(settings.LOG_LEVEL)

    def _get_file_handler(self,filename):  #设置一下要往那个文件里面写,和编码问题
        filehandler = logging.FileHandler(filename=filename,encoding="utf-8")
        filehandler.setFormatter(self.formatter)  #日志格式
        return filehandler

    def _get_console_handler(self):
        console_handler = logging.StreamHandler(sys.stdout)
        console_handler.setFormatter(self.formatter)
        return console_handler

    @property
    def logger(self):
        return self._logger

logger = Logger()._logger

if __name__ == ‘__main__‘:  #下面的是用来测试这个模块
    logger.debug("1")
    logger.info("2")
    logger.warning("3")
    logger.error("4")
    logger.critical("5")

可能有些一些关键字不懂,可以点下面链接:

Python中“*”和“**”的用法 || yield的用法 || ‘$in’和‘$nin‘ || python @property的含义

五、requests请求头

import random

USER_AGENTS =[  #requests请求头
      "Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",    "Avant Browser/1.2.789rel1 (http:#www.avantbrowser.com)",
      "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5",    "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9",    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7",    "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14",
      "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14",    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1",    "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7",
      "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre",    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10",    "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)",    "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB5",    "Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0E)",    "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",    "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110622 Firefox/6.0a2",
      "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1",    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko/20100815 Minefield/4.0b4pre",    "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )",    "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)",    "Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a",    "Mozilla/2.02E (Win95; U)",    "Mozilla/3.01Gold (Win95; I)",    "Mozilla/4.8 [en] (Windows NT 5.1; U)",    "Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)",    "HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",    "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0",    "Mozilla/5.0 (Linux; U; Android 1.5; en-us; sdk Build/CUPCAKE) AppleWebkit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",    "Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",    "Mozilla/5.0 (Linux; U; Android 1.5; en-us; htc_bahamas Build/CRB17) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",    "Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",    "Mozilla/5.0 (Linux; U; Android 1.5; de-ch; HTC Hero Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",    "Mozilla/5.0 (Linux; U; Android 2.1; en-us; HTC Legend Build/cupcake) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",    "Mozilla/5.0 (Linux; U; Android 1.5; de-de; HTC Magic Build/PLAT-RC33) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 FirePHP/0.3",    "Mozilla/5.0 (Linux; U; Android 1.6; en-us; HTC_TATTOO_A3288 Build/DRC79) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",    "Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",    "Mozilla/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build/CRB43) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari 525.20.1",    "Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile_G2_Touch Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
      "Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",    "Mozilla/5.0 (Linux; U; Android 2.0; en-us; Milestone Build/ SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",    "Mozilla/5.0 (Linux; U; Android 2.0.1; de-de; Milestone Build/SHOLS_U2_01.14.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",    "Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522  (KHTML, like Gecko) Safari/419.3",    "Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",    "Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",    "Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",    "Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",    "Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",    "Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",    "Mozilla/5.0 (Linux; U; Android 1.6; es-es; SonyEricssonX10i Build/R1FA016) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
      "Mozilla/5.0 (Linux; U; Android 1.6; en-us; SonyEricssonX10i Build/R1AA056) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1"]

def get_requests_headers():  #这个方法就是随机获取一个请求头
    headers = {  #除了user-Agent变一下,其他大多都不用变
        ‘User-Agent‘ : random.choice(USER_AGENTS),
        ‘Accept‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8‘,
        ‘Accept-Language‘: ‘en-US,en;q=0.5‘,
        ‘Connection‘: ‘keep-alive‘,
        ‘Accept-Encoding‘: ‘gzip,deflate‘
    }
    return headers

if __name__ == ‘__main__‘:  #模块检查
    print(get_requests_headers())

原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12173647.html

时间: 2024-10-09 02:41:47

python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头的相关文章

python代理池的构建2——代理ip是否可用的处理

上一篇博客地址:python代理池的构建1——代理IP类的构建,以及配置文件.日志文件.requests请求头 一.代理ip是否可用的处理 #-*-coding:utf-8-*- #check ip ''' 目标:检查代理IP速度,匿名程度以及支持的协议类型. 步骤: 检查代理IP速度和匿名程度; 代理IP速度:就是从发送请求到获取响应的时间间隔 匿名程度检查: 对http://httpbin.org/get 或https://httpbin.org/get 发送请求 如果响应的origin 中

python代理池的构建3——爬取代理ip

上篇博客地址:python代理池的构建2——代理ip是否可用的处理和检查 一.基础爬虫模块(Base_spider.py) #-*-coding:utf-8-*- ''' 目标: 实现可以指定不同URL列表,分组的XPATH和详情的XPATH,从不同页面上提取代理的IP,端口号和区域的通用爬虫; 步骤: 1.在base_ spider.py文件中,定义 一个BaseSpider类, 继承object 2.提供三个类成员变量: urls:代理IP网址的URL的列表 group_ xpath:分组X

python学习 —— 建立IP代理池

代码: from bs4 import BeautifulSoup from requests import Session, get, post from time import sleep import random import re, os class ProxyIpPool(object): def __init__(self,page): object.__init__(self) self.page = page def init_proxy_ip_pool(self): url

python asyncio异步代理池

使用python asyncio实现了一个异步代理池,根据规则爬取代理网站上的免费代理,在验证其有效后存入redis中,定期扩展代理的数量并检验池中代理的有效性,移除失效的代理.同时用aiohttp实现了一个server,其他的程序可以通过访问相应的url来从代理池中获取代理. 源码 Github 环境 Python 3.5+ Redis PhantomJS(可选) Supervisord(可选) 因为代码中大量使用了asyncio的async和await语法,它们是在Python3.5中才提供

【Python3爬虫】Scrapy使用IP代理池和随机User-Agent

在使用爬虫的时候,有时候会看到由于目标计算机积极拒绝,无法连接...,这就是因为我们的爬虫被识别出来了,而这种反爬虫主要是通过IP识别的,针对这种反爬虫,我们可以搭建一个自己的IP代理池,然后用这些IP去访问网站. 新建一个proxies.py,实现我们自己的代理池,主要模块有获取模块.验证模块和存储模块. (1)获取模块:爬取网上的免费代理,这一部分我就写了个爬取西刺代理的代码,除了获取网上的代理,还要对代理池中代理进行清洗,因为有些代理会失效: (2)验证模块:验证我们的代理是否可用,如果不

[Golang] 一个简易代理池

晚上写了一个代理池,就是在一个代理网站上爬取代理ip和端口以及测试是否可用.接下来可能考虑扩展成一个比较大的 golang实现的代理池. 简易版代码: 1 package main 2 3 import ( 4 "os" 5 "fmt" 6 log "github.com/Sirupsen/logrus" 7 "io/ioutil" 8 "strings" 9 ) 10 11 type New struct

代理池的创建

应用场景 爬虫过于频繁的抓取网站信息会被反爬虫机制屏蔽掉,或者有些网站对我们的Ip有限制,一个IP之能操作一次,这个时候就需要设置代理了.这方面需求还是很大的,有专门的服务商提供代理,没钱的自己动手打造一个代理池吧. 所用的工具 O/RM-Entity Framework Html解析-HtmlAgilityPack  任务调度-Quartz.NET基本原理 部分网站上有免费的代理IP信息,比如xicidaili.com,proxy360.cn.这些网站有很多免费代理IP,然而有些质量不好,需要

【Python3爬虫】教你怎么利用免费代理搭建代理池

一.写在前面 有时候你的爬虫刚开始的时候可以正常运行,能够正常的爬取数据,但是过了一会,却出现了一个"403 Forbidden",或者是"您的IP访问频率太高"这样的提示,这就意味着你的IP被ban了,好一点的情况是过一段时间你就能继续爬取了,坏一点的情况就是你的IP已经进入别人的黑名单了,然后你的爬虫就GG了.怎么办呢?我们可以通过设置代理来解决,付费代理的效果自然不必多说,但是对于学习阶段的人来说,我觉得爬取网上的免费代理来用是一个更好的选择,而这一篇博客就将

python爬虫+多线程+多进程+构建IP代理池

目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是晚上睡觉听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但是禁ip很严重,就拿静听网来说,你听一个在线音频,不能一个没听完就点击下一集,甚至不能快进太快,否则直接禁你5分钟才能再听,真的是太太讨厌了... 于是我就想用爬虫给它爬下来存储本地就nice了. 我把我的大概分析步骤分享出来. 步骤1: 我查看静听网网页url有一个规律,基网址是http://ww