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


相关文章内容简介
推荐阅读
  • 18 2020-01
    代理IP爬取数据的两种方式

    大数据时代下,数据爬取成为很多企业和个人的工作重点,过程中经常遇到很多问题,比如时间限制、IP限制、验证码限制等等,都可能会导致爬虫无法进行,所以我们常常会用到代理IP,今天

  • 08 2019-08
    低价代理IP可以用吗

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

  • 13 2019-07
    如何使用代理IP来批量注册账号

    如何使用代理IP来批量注册账号?在我们做一些网络项目时,经常要用到大量的账号,比如微信投票,需要大量的微信账号;比如论坛发帖,由于论坛限制每天每账号只能发限定数量的帖子,就

  • 30 2018-11
  • 16 2019-08
    代理IP怎么分类

    动态代理IP的作用越来越大,有用来做爬虫的,有用来注册的,还有用来投票的,抢购的啥都有,还有很多用来隐藏自己真实的IP,做一些不可描述的事情,也有很多朋友问。今天我们来讲讲代

  • 15 2019-08
    高匿代理IP才是安全的选择

    在上网的过程中,信息是很容易泄露的,像一些商家很容易收集到我们的浏览记录,然后像我们推送广告等。这种情况,高匿代理IP才是安全的选择。使用高匿名代理IP,目标网站看到的就只是