携程智联等网站百分之60%的访问量都是爬虫,对此我们应该怎么办

前言

爬虫和反爬虫日益成为每家公司的标配系统。

爬虫在情报获取、虚假流量、动态定价、恶意攻击、薅羊毛等方面都能起到很关键的作用,所以每家公司都或多或少的需要开发一些爬虫程序,业界在这方面的成熟的方案也非常多。

有矛就有盾,每家公司也相应的需要反爬虫系统来达到数据保护、系统稳定性保障、竞争优势保持的目的。

像安全与黑客从来都是相辅相成一样。

爬虫与反爬虫也是在双方程序员的斗智斗勇的过程不断发展和成长的。

简单的反爬虫:

通过Headers反爬虫

从用户请求的Headers反爬虫是最常见的反爬虫策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。

基于用户行为反爬虫:

对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制。

参数加密:js 处理过程可以写的很复杂,以至于爬虫程序员没法分析。

我们在和谁对抗?

    • 应届毕业生(三月份爬虫)
      三月份爬虫通常和毕业生(本科生、硕士、博士等)有关,他们的爬虫简单粗暴,为了让论文有数据支撑,根本不管服务器压力,加上人数不可预测,很容易弄挂站点。
    • 创业小公司
      每年新增的创业公司很多,程序开发完后,缺少数据支撑,出于公司生死存亡的考虑,不断爬取数据。
    • 不小心写错了没人去停止的失控小爬虫
      像知乎,携程,财经等网站,可能高达60%的访问量是爬虫。你就算直接封杀,也无济于事。他们可能根本爬不到任何数据了,除了http code是200以外,一切都是不对的,但由于托管后无人认领,仍然会依然孜孜不倦地爬取。
    • 成型的商业对手
      这是最大的对手,有技术,有钱,要什么有什么,如果和你死磕,你就只能硬着头皮和他死磕。
    • 抽风的搜索引擎
      搜索引擎也有抽风的时候,而且一抽风就会导致服务器性能下降,请求量跟网络攻击没有区别。

今天就说一说基本的反爬虫,实现方式是拒绝频繁访问的ip,首先我们要实现 IHttpModule接口

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.SessionState;
using System.Configuration;
namespace MyHttp
{
  public class UrlReWrite : IHttpModule
  {
    /// <summary>
    /// 单个IP最大连接限制数量
    /// </summary>
    private int rowCount = Convert.ToInt32(ConfigurationSettings.AppSettings["HttpRowCount"]);
    /// <summary>
    /// 指定区域时间范围 单位分
    /// </summary>
    private int httpTime = Convert.ToInt32(ConfigurationSettings.AppSettings["HttpTime"]);
    public void Init(HttpApplication application)
    {
      application.BeginRequest += (new
         EventHandler(this.Application_BeginRequest));
      application.EndRequest += (new
         EventHandler(this.Application_EndRequest));
    }
    private void Application_BeginRequest(Object source, EventArgs e)
    {
      HttpApplication Application = (HttpApplication)source;
      HttpContext ctx = Application.Context;
      //IP地址
      string isIp = ctx.Request.UserHostAddress;
      if (ctx.Application["time"] == null)
      {
        ctx.Application["time"] = DateTime.Now;
      }
      else
      {
        DateTime isTime = (DateTime)ctx.Application["time"];
        int timeTract = Convert.ToInt32(DateTime.Now.Subtract(isTime).Minutes.ToString());
        if (timeTract > (httpTime - 1))
        {
          ctx.Application["time"] = null;
          ctx.Application["myip"] = null;
        }
      }
      if (ctx.Application["myip"] != null && ctx.Application["myip"] is CartIp)
      {
        CartIp cartIp = (CartIp)ctx.Application["myip"];
        cartIp.Insert(isIp);
        ctx.Application["myip"] = cartIp;
        if (cartIp.GetCount(isIp) > rowCount)
        {
          ctx.Response.Clear();
          ctx.Response.Close();
        }
      }
      else
      {
        CartIp cartIp = new CartIp();
        cartIp.Insert(isIp);
        HttpContext.Current.Application["myip"] = cartIp;
      }
    }
    private void Application_EndRequest(Object source, EventArgs e)
    {
    }
    public void Dispose()
    {
    }
  }
}

ListIp 类

using System;
using System.Collections.Generic;
using System.Text;
namespace MyHttp
{
  [Serializable]
  public class ListIp
  {
    private string ip;
    private int count;
    /// <summary>
    /// IP地址
    /// </summary>
    public string IP
    {
      get { return ip; }
      set { ip = value; }
    }
    /// <summary>
    /// 累加数量
    /// </summary>
    public int Count
    {
      get { return count; }
      set { count = value; }
    }
  }
  [Serializable]
  public class CartIp
  {
    public CartIp()
    {
      if (_listIp == null)
      {
        _listIp = new List<ListIp>();
      }
    }
    private List<ListIp> _listIp;
    public List<ListIp> _ListIp
    {
      get { return _listIp; }
      set { _listIp = value; }
    }
    /// <summary>
    /// 添加IP
    /// </summary>
    public void Insert(string ip)
    {
      int indexof = ItemLastInfo(ip);
      if (indexof == -1)
      {
        //不存在
        ListIp item = new ListIp();
        item.IP = ip;
        _listIp.Add(item);
      }
      else
      {
        _listIp[indexof].Count += 1;
      }
    }
    //判断IP是否存在
    public int ItemLastInfo(string ip)
    {
      int index = 0;
      foreach (ListIp item in _ListIp)
      {
        if (item.IP == ip)
        {
          return index;//存在
        }
        index += 1;
      }
      return -1;//不存在
    }
    /// <summary>
    /// 获得IP的数量
    /// </summary>
    /// <param name="ip"></param>
    /// <returns></returns>
    public int GetCount(string ip)
    {
      foreach (ListIp item in _ListIp)
      {
        if (item.IP == ip)
        {
          return item.Count;//存在
        }
      }
      return -1;//不存在
    }
  }
}

在web.config 配置访问规则

<appSettings>
<add key="HttpRowCount" value="100"/>
<add key="HttpTime" value="10"/>
</appSettings>
<system.web>
  <httpModules>
  <add name="UrlReWrite" type="MyHttp.UrlReWrite"/>
 </httpModules>
</system.web>

对于这种方式的反反爬虫只能是放慢爬虫速度,防止被拉入黑名单!。。

原文地址:https://www.cnblogs.com/ZaraNet/p/9788297.html

时间: 2024-11-06 07:19:33

携程智联等网站百分之60%的访问量都是爬虫,对此我们应该怎么办的相关文章

OTA“多角恋”:携程闪电入股同程、途牛

OTA"多角恋":携程闪电入股同程.途牛 2014年04月30日 16:38 来源:南方都市报 参与互动(0) "携程将把景点门票的现付业务接入同程,并向同程投资超过2亿美金,支持同程独立IPO."4月28日晚间,同程网CEO吴志祥以发布内部邮件的形式,"向大家报告一个好消息." 而就在十来天前,同程旅游刚与艺龙旅行网签署了战略合作协议.据业内知情人士透露,伴随此次入股,携程与同程之间签署了一份"缓冲期"协议.即一年后,同程将

瑞星:切莫忽视信息安全 携程事件为互联网企业敲响警钟

5月28日,国内爆出了堪称今年最大的互联网信息安全事件:携程旅行网除首页外突然全部瘫痪,打开主页后点击任意链接显示"Service Unavailable",而百度搜索上的携程官方页面也显示404错误.稍后,携程官方发出回应,称因携程部分服务器遭到不明攻击,导致官方网站及APP暂时无法正常使用.不过据业内人士传闻,本次事件是数据库被物理删除所致. 该消息一出立刻震惊了全国,在微博.微信朋友圈中得到了疯狂的转发.当看到这条消息时,博主心中便有了很大的疑问,众所周知,携程是国内旅行网站的巨

艺龙私有化,携程与腾讯眉来眼去

艺龙宣布,董事会收到腾讯控股的私有化要约,将以18美元的价格以收购艺龙发行的除了携程.铂涛和腾讯等艺龙股东外的全部流通股.如果这个交易能够完成,艺龙将完成私有化从美国纳斯达克股票市场退市,然后寻求在国内资本市场再度上市. 至于艺龙再次卖身给腾讯的原因是,艺龙表示因为竞争对手"看到中国移动住宿市场的巨大潜力,不惜以每年亏损十多亿元人民币的烧钱速度在这个市场里疯狂扩张,艺龙因此也面临着巨大的竞争压力."看上去是在控诉对手的以钱压人. 其实不说在线旅游行业,整个互联网都是在花钱买时间抢占市场

携程第四代架构探秘之运维基础架构升级

作为国内最大的OTA公司,携程为数以亿计的海内外用户提供优质的旅游产品及服务.2014年底携程技术中心的框架.系统和运维团队共同启动了架构改造项目,历时2年,涉及所有业务线.本文回顾了携程在整个技术架构改造过程中的一些实践和收获. 一.写在前面 随着携程业务量迅速增长.业务变化越来越敏捷,对于应用交付的效率也提出了更高的要求.根据统计,截止2014年底携程总应用数在5000个左右,平均每周约有3000次以上的发布需求.所以作为整体交付环节中极为重要的一环,应用的部署和发布是提高交付效率的关键,然

vue模拟携程官网的搭建

仿造携程官网 题外话: 刚开始学前端的时候,有一天看到携程官网.就希望有一天能模拟搭出来.自己拖拖拉拉的一直没整, 但是但是麻麻我终于完成了!!(曾经亲爱的同事把传送门删掉了不感谢他了 fk) 感谢叶师兄拯救了我携程携程 源码仿携程源码 目录结构 基于vue+less进行开发,配合强行在携程复制的数据搭建的网站 目录是基于vue-cli的基础下搭建的. build/config配置文件 src是主要内容(assets包括公用的js文件,css样式/components是公用组件/module是页

携程事件简单故障分析

互联网安全越来越严峻 自从windowsxp停止更新维护后,世界范围内的安全事件就层出不穷,几乎一发不可收拾. windows漏洞很多,入侵windows服务器基本上不是问题,所以安全事件不可避免. linux最近爆出很多漏洞,还有很多漏洞未爆出. 感觉unix比较安全,比如sinox操作系统.但是只是操作系统层面安全还不够,应用程序安全跟操作系统无关. 应用程序的漏洞,随着应用程序复杂度增加,漏洞可能也增加,而代码安全审核就很重要. 携程故障分析 1.线上数据全部被删,再次发布依旧被删 线上数

携程前端

字体渲染 1 commentsfhz 2014-07-29 说到web性能,前端工程师很自然地反应是yahoo的30+条优化规则.这些规则可以将网页加载从原来的几秒甚至十几秒较少到3s甚至1s以内.当一个完整界面展现在用户眼前时,内容就通过不同的字体.图片以及多媒体传达给用户.使用户在1s内看到网页和使用户留在网页上几分钟甚至几十分钟同样重要.字体作为内容承载信息的重要部分,若使用不“适当”的字体或者字体由于渲染等缘故对用户不友好,则会(有可能)造成不必要的用户流失.本文介绍浏览器的字体渲染,希

今天携程出事了:让我们来学习下http的响应码

就在今天,2015年5月28日,中国最大的旅游机票预订网站--携程网粗大事了.据传携程网的数据库被人物理删除了,而容灾备份的数据又无法正常使用,服务器全面遭受瘫痪.每小时给携程带来的损失约100万美元.巴拉巴拉,作为中国最大的.Net互联网公司,携程出了这样的事情真是不应该(技术人员:怪我咯). 转入正题当我们打开携程首页会看到这样一个错误页面: 在页面的下方我们会看到404这样一串数字. 其实在我们打开一些小网站时,常常会遇到这样一串数字,这些数字是我们进行http请求时,服务端给出的响应结果

图书企业信息网是否存在类似携程重大安全漏洞

携程为了实现"携程在手.说走就走",涉嫌储存用户的信用卡支付宝等信息,这一重大安全漏洞被人们所重视!那么,中国图书企业信息网是否存在信息泄露等问题呢? 答案是否定的,中国图书企业信息网在用户安全信息方面做的很好,不会将用户的任何资料透露给任何人,也不会因为系统因素将用户的信息泄露到互联网上. 中国图书企业信息网的用户信息保存方式,用户的个人账户保存在中国图书企业信息网的数据库中.而用户的营业执照及个人的隐秘信息,我们选用书面及保密的保存方式,绝不会因为网站被攻击而使用户的信息泄露. 用