代理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)


相关文章内容简介
推荐阅读
  • 08 2019-08
    低价代理IP可以用吗

    在找代理IP的时候,发现很多价格便宜的软件,价格的差别不知该怎么选择。那么,低价代理IP可以用吗?大家有所不知,很多低价的代理IP商家,都是在免费代理IP中将IP筛选出来,使用效果其

  • 21 2020-02
    爬虫代理ip哪家好

    大数据时代来临,爬虫工作越来越重要,但是,在爬取过程中,遇到最多的一个问题则是:封IP。有时候爬着爬着就爬不动了,限制IP访问了,或者不停的弹出验证码,总之,就是不让你爬了。

  • 10 2020-02
    代理IP所在地区如何定位?

    代理IP所在地区如何定位?拿到一个IP之后,如何确定这个IP是哪个地区的呢,方法比较多,这里介绍两个最直接的方法。第一,直接百度搜索这个IP地址,比如IP地址是1.2.3.4,那么你百度搜索1.2.

  • 29 2019-01
  • 06 2019-12
    代理IP做爬虫的正确姿势

    没有被封过IP的爬虫工程师,肯定不是一个好的工程师。在爬虫工作的过程中,总是会遇到封IP的烦心事,今天这样爬,被封,明天那样爬,还是被封,到底要怎样爬呢,才不会被封。

  • 05 2019-08
    排名靠前的代理IP商家推荐

    许多人都需要使用国内代理ip​的,如果能找个不错的商家,这样用起来也是不错的。但是现在许多的服务商全是直接在网上抓取ip资源,有太大的危险因素,虽然代理ip软件很多,可是多数都使