代理ip

>

换ip软件

>

http代理

>

ip代理

您的位置:首页 > 新闻资讯 > 文章内容
为什么爬虫要使用动态IP代理来爬取网站
来源:网连代理 作者:admin 时间:2019-07-12 16:50:03

  为什么爬虫要使用动态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)


相关文章内容简介
推荐阅读
  • 22 2019-11
    免费代理IP和付费代理IP的区别

    使用过代理IP的用户都知道,代理IP有免费使用的,也有付费使用的。首先免费代理IP就如字面意思是免费使用的,虽然表面不花钱,但免费代理IP可以用的几率很小,增加了时间成本。这种免费

  • 28 2019-10
    Android模拟器设置网络代理的4种方法

    在服务器上启动模拟器的时候加了--http-proxy,但是不起作用。所以梳理了Android模拟器设置网络代理的4种方法,供给大家阅读参考。一:将网络连接代理设置写入配置数据库(适合启动模拟器无

  • 07 2020-07
  • 19 2019-06
    IP代理软件为什么很受欢迎

    IP代理软件为什么很受欢迎?对于网络营销推广和SEO的朋友来说,数据抓取和模拟访问都是必备的工作,这两种方式都需要有大量的IP资源支持,很多用户在一些网站上面批量注册帐号、发布留

  • 19 2019-08
    单IP爬虫多久会被限制

    爬虫在工作的时候,只有一个IP一直使用是很容易被限制的。但是多久会被封,要看使用的频率,使用的频率越快自然会被封的越早。那么,单IP爬虫多久会被限制?现在很多网站都根据IP设置了

  • 01 2019-11
    爬虫电商使用海量定制代理ip效果更好

    随着数据时代和智能化时代到来,爬虫作为重要的数据来源,自身需要一些技术提升来适应时代的要求,这也就对爬虫工程师提出更高的要求。成为一个优秀的爬虫工程师,离不开稳定代理IP的