今天就跟大家聊聊有關(guān)Python搭建爬蟲代理池的方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

在眾多的網(wǎng)站防爬措施中,有一種是根據(jù)ip的訪問頻率進行限制,即在某一時間段內(nèi),當(dāng)某個ip的訪問次數(shù)達到一定的閥值時,該ip就會被拉黑、在一段時間內(nèi)禁止訪問。
應(yīng)對的方法有兩種:
1. 降低爬蟲的爬取頻率,避免IP被限制訪問,缺點顯而易見:會大大降低爬取的效率。
2. 搭建一個IP代理池,使用不同的IP輪流進行爬取。
1、從代理網(wǎng)站(如:西刺代理、快代理、云代理、無憂代理)爬取代理IP;
2、驗證代理IP的可用性(使用代理IP去請求指定URL,根據(jù)響應(yīng)驗證代理IP是否生效);
3、將可用的代理IP保存到數(shù)據(jù)庫;
常用代理網(wǎng)站:西刺代理 、云代理 、IP海 、無憂代理 、飛蟻代理 、快代理
工程結(jié)構(gòu)如下:

ipproxy.py
IPProxy代理類定義了要爬取的IP代理的字段信息和一些基礎(chǔ)方法。
# -*- coding: utf-8 -*-
import re
import time
from settings import PROXY_URL_FORMATTER
schema_pattern = re.compile(r'http|https$', re.I)
ip_pattern = re.compile(r'^([0-9]{1,3}.){3}[0-9]{1,3}$', re.I)
port_pattern = re.compile(r'^[0-9]{2,5}$', re.I)
class IPProxy:
'''
{
"schema": "http", # 代理的類型
"ip": "127.0.0.1", # 代理的IP地址
"port": "8050", # 代理的端口號
"used_total": 11, # 代理的使用次數(shù)
"success_times": 5, # 代理請求成功的次數(shù)
"continuous_failed": 3, # 使用代理發(fā)送請求,連續(xù)失敗的次數(shù)
"created_time": "2018-05-02" # 代理的爬取時間
}
'''
def __init__(self, schema, ip, port, used_total=0, success_times=0, continuous_failed=0,
created_time=None):
"""Initialize the proxy instance"""
if schema == "" or schema is None:
schema = "http"
self.schema = schema.lower()
self.ip = ip
self.port = port
self.used_total = used_total
self.success_times = success_times
self.continuous_failed = continuous_failed
if created_time is None:
created_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
self.created_time = created_time
def _get_url(self):
''' Return the proxy url'''
return PROXY_URL_FORMATTER % {'schema': self.schema, 'ip': self.ip, 'port': self.port}
def _check_format(self):
''' Return True if the proxy fields are well-formed,otherwise return False'''
if self.schema is not None and self.ip is not None and self.port is not None:
if schema_pattern.match(self.schema) and ip_pattern.match(self.ip) and port_pattern.match(self.port):
return True
return False
def _is_https(self):
''' Return True if the proxy is https,otherwise return False'''
return self.schema == 'https'
def _update(self, successed=False):
''' Update proxy based on the result of the request's response'''
self.used_total = self.used_total + 1
if successed:
self.continuous_failed = 0
self.success_times = self.success_times + 1
else:
print(self.continuous_failed)
self.continuous_failed = self.continuous_failed + 1
if __name__ == '__main__':
proxy = IPProxy('HTTPS', '192.168.2.25', "8080")
print(proxy._get_url())
print(proxy._check_format())
print(proxy._is_https())
本文題目:Python搭建爬蟲代理池的方法-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://www.chinadenli.net/article38/dosipp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、電子商務(wù)、域名注冊、軟件開發(fā)、動態(tài)網(wǎng)站、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容