注意: IP代理精灵仅提供国内ip网络节点,不提供境外网络节点,不能用于任何非法用途或访问境外封闭网站,不能跨境联网,只能用于合法的国内网络加速。

请登录 注册 实名验证

首页 > 新闻资讯 > 爬虫代理IP池实战之谈

爬虫代理IP池实战之谈

来源:IP代理精灵 作者:admin 时间:2019-10-22 16:14:47

爬虫代理IP池实战之谈!大家写爬虫程序的时候,当抓取频率较快或者抓取一些robots.txt禁爬路径,肯定会碰到被网站屏蔽的情况,这时候目标服务器要么直接返回404,要么就是返回禁止的提示信息,总之就是爬虫失效了(抓不到你想要的内容)。

如果遇到这种情况,对应小型爬虫来说,最简单经济有效的方式,就是通过代理来反问。

一些基本概念

爬虫代理IP池实战之谈

代理IP池其实就是一堆可以用来做代理访问的Pool,作为Service Provider它对外提供可用的代理ip及端口。

代理IP从隐藏级别上分三类:

透明代理,服务器知道你用了代理,但同时也知道你的真实IP,说白了是不以隐藏自己IP为目的使用的,比如翻墙什么的

普通代理,服务器也知道你用了代理,但不知道你的真实IP

高匿代理,服务器不知道你用了代理,更不知道你的真实IP

其中高匿代理指代理服务器不向目标服务器传递X_FORWARDED_FOR变量

Python的实现方式

设计思路和原理本

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

功能模块

ProxyWebsite - 目标抓取的代理服务网站

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

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

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

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

Service - 对外提供REST API服务

核心代码实现示例

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

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

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

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

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)

最新资讯

推荐阅读

  1. 08

    2019-08

    高匿代理更加稳定吗

    大家都知道,代理IP分为透明代理、普通匿名代理和高级匿名代理三种,很多朋友对高匿名代理并不是很了解,那么,到底是不是高匿代理更加稳定呢?三种代理主要是在代理服务器端的配置不

  2. 09

    2019-07

    怎么选择好用又合适的代理IP

    互联网的迅速发展,用户需求的不断增多,代理IP迅速崛起,用户们实现一些目的时不得不随时随地得使用代理IP。由于代理IP市场的巨大和开放,代理IP行业可以说是鱼龙混杂,参差不齐,想要

  3. 14

    2019-05

    如何使用动态拨号vps通过爬虫抓取贴吧数据

    有时需要批量获取数据,如果要获取的网页非常多,一页一页的翻是不是太累了,有没有简单的方法?下面小编教教大家如何使用动态拨号vps通过爬虫抓取贴吧数据。想要批量获取数据,可以利

  4. 26

    2020-02

    选择代理ip最关键的是代理ip的品质

    选择代理ip最关键的是代理ip的品质!人们平常一切正常应用自身的 ip 上网的情况下,采用的是服务器,那麼用 代理ip 上网的情况下,都是必须服务器的,但是人们用 代理服务器 的名字来开展了

  5. 14

    2019-05

    如何使用代理网络来管理和抓取社交媒体

    管理多个社交媒体帐户或抓取数据时,您可能会获得验证码,或者您的请求可能会被屏蔽。社交网站正在实施严格而复杂的限制,以控制它们的使用方式。无论您是管理帐户还是使用抓取工具,

  6. 15

    2019-07

    研发代理ip软件的初衷是什么?

    在http代理ip的市场上各种同类应用一直都不断更新,但是最近在这个市场上杀出的一匹黑马,这匹黑马名叫IP代理精灵平台。其实我们大多数人对于浏览器都熟悉不过了,但是浏览器后面多了一