帮助中心

   

热门搜索: 免费续期  推广  永久会员

实现爬虫代理IP的方法

爬虫玩家相信都遭遇过IP被封的情况吧,如果没有使用代理IP,这种情况发生的频率就更多了。IP频频被封,这样实在是太影响我们爬虫的效率跟心情。所以,我们需要一个爬虫的代理IP池。

Python抓取代理IP爬虫的实现方式:

1、设计思路和原理本

2、思路就是从目前提供代理服务的网站获取可使用的IP、端口、代理类型信息,并检测可用性,然后对外提供服务。

3、功能模块

 

实现爬虫代理IP的方法
  ProxyWebsite – 目标抓取的代理服务网站

ProxyWebsite

class ProxyWebsite(object): def __init__(self, url, pattern, ip_pos, port_pos): self.url = url self.pattern = pattern self.ip_pos = ip_pos self.port_pos = port_pos

Crawler – 抓取模块,通过HTTP来抓取定向代理服务网站内容

Crawler

class Crawler(object): @staticmethod def get_html(proxy_website): try: rsp = requests.get(proxy_website.url) return (0, rsp.text) except Exception as e: return (-1, e)

Extrator – 抽取模块,将HTML页面内容,抽取成结构化数据

Extrator

class Extractor(object): @staticmethod def get_data(proxy_website, html): try: pattern = re.compile(proxy_website.pattern, re.M|re.S ) return map(lambda x:(x[proxy_website.ip_pos], x[proxy_website.port_pos]), pattern.findall(html)) except Exception as e: return (-1, e)

Data – 数据模块,为结构化数据存储服务

Data

class Data(object): def __init__(self, ip, port, http_enable, https_enable): self.ip = ip self.port = port self.http_enable = http_enable self.https_enable = https_enable

Validator – 检验模块,检查代理的可用性

Validator

class Validator(object): @staticmethod def get_baidu(ip, port): try: proxies = {‘http’: ‘http://%s:%s’ %(ip, port), ‘https’: ‘http://%s:%s’ %(ip, port)} http_valid_result = False rsp = requests.get(‘http://www.baidu.com’, proxies = proxies, verify=False, timeout=(10, 60)) if rsp.status_code == 200: http_valid_result = True rsp = requests.get(‘https://www.baidu.com’, proxies = proxies, verify=False, timeout=(10, 60)) if rsp.status_code == 200: https_valid_result = True return (0, (http_valid_result, https_valid_result)) except Exception as e: return (-1, e)

Service – 对外提供REST API服务

现在爬虫代理IP池是大家爬虫前的常规配置了,关于代理IP的来源,大家可以去抓取网上的免费IP,也可以向优质的代理服务商如迅联加速购买。

关闭
19907977089
关注微信公众号,免费送30分钟时长