APP下载

网络爬虫反爬策略研究

2019-06-28胡俊潇陈国伟

科技创新与应用 2019年15期
关键词:网络爬虫

胡俊潇 陈国伟

摘  要:网络爬虫在工作时会对目标站点发送大量的请求,这样的爬虫工作方式决定了其会消耗不少目标站点的服务器资源,这对于一个服务器不大的中小型站点来说负载是巨大的,甚至会导致该站点直接崩溃。另外某些网站也不希望自己的内容被轻易的获取,如电商网站的交易额,这些数据是一个互联网产品的核心,因此采取一定的手段保护敏感的数据。因此很多网站都在站点中加入了反爬机制。例如User-Agent+Referer检测、账号登陆及Cookie验证等。文章讨论了几种主流的方法来避免爬虫被目标站点服务器封禁,从而保证爬虫的正常运行。

关键词:网络爬虫;反爬虫;抓取策略

中图分类号:TP393.092     文献标志码:A         文章编号:2095-2945(2019)15-0137-03

Abstract: Web crawlers send a large number of requests to the target site when they work. this way of crawler work determines that it will consume a lot of server resources of the target site, which is a huge load for a small and medium-sized site with small and medium-sized servers. It can even cause the site to crash directly. In addition, some websites do not want their content to be easily accessed, such as the transaction volume of e-commerce websites, these data is the core of an Internet product, so take certain means to protect sensitive data. As a result, many sites have added anti-crawling mechanisms to their sites. For example, User-Agent + Referer detection, account login and Cookie verification. In this paper, several mainstream methods are discussed to avoid the crawler being blocked by the target site server, so as to ensure the normal operation of the crawler.

Keywords: Web crawler; anti-crawler; crawling strategy

网络中承载的信息随着互联网的发展呈现出了爆炸式发展的趋势,如何从丰富庞大的信息中快速找到自己需要的信息变得越来越重要。越来越多的机构、个人使用网络爬虫技术去网站中获取信息,大量的爬虫访问会使该网站的访问速度减慢甚至无法访问[1],因此,很多网站引入了反爬机制来防止网络爬虫频繁的访问。下面列举了几种主流的反爬策略。

1 模拟登陆

模拟登陆指通过计算机程序代码模拟普通用户使用浏览器登陆某网站的过程。有的网站在进行内容展示的时候,需要用户完成登陆操作,如果需要爬虫此类型的页面,就要求爬虫能够模拟用户的正常登陆行为。其技术核心主要可以分为两个部分:(1)抓包分析;(2)程序实现。

互联网中的网页在进行通信时是遵循HTTP协议的,网站服务器向访问者返回的response是由访问时的参数决定的,抓包的目的就是通过捕捉人为操作中的一系列请求记录,从中找到用户操作的关键请求参数。

在请求访问某网页时,request请求中携带了两部分参数: Request Method与Headers。

Request Method即HTTP请求方法,目前较为主流的是GET、POST两种请求方式,GET方法用来访问已知的页面,访问成功后指定资源的服务器返回响应内容。POST向指定資源提交特定的数据进行请求,例如提交表单,这些特定的数据包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

Headers中包含了Accept、Accept-Encoding、Accept-Language、Connection、Cookie、Host、Referer、User-Agent等信息。Accept指的是可以接收的信息类型,例如仅接收视频文件。Accept-Encoding是指浏览器能够进行解码的数据编码方式,比如gzip。Accept-Language指的是浏览器所希望收到的数据语言种类,有的服务器提供多种语言,但这种时候必须要用到这个参数。Connection指的是是否需要保持连接。Host指的是初始URL中的主机和端口。

Cookie是Headers中最重要的请求头信息之一,网站的服务器通过Cookie来标识区别不同的用户。HTTP是一种无状态的连接,当服务器同时收到多个请求时,服务器是无法判断该请求来自哪一个客户端,于是需要Cookie来标识用户的身份,储存用户的状态信息,如登陆状态。当用户第一次登陆网站时,服务器会给浏览器下发一个Cookie,浏览器将Cookie保存在本地,当在该网站域名内跳转时,用户无需再次登陆该网站,同时服务器也能够识别该请求来自同一个用户。获取Cookie的方式有很多种,常用的就是通过抓包直接在浏览器中找到相应的Cookies信息,将该信息填入Headers对应的字段中,即可实现访问。还可以通过在Python使用Selenium库来调用浏览器,使用Selenium库中提供的find_element(s)_by_xxx的方法来找到目标站点中的账号密码输入框、登陆按钮等元素进行输入点击等操作,登陆后将Cookies保存下来。值得注意的是,Cookie是有时效的,超过时效后在使用该Cookie无法实现访问了。具体的时效长短每个网站设定的时间不一致,需根据具体网站设置更新Cookie的时间。

2 模拟User-Agent

User-Agent指的是用户在访问站点时所使用的客户端种类和版本,一般指的是所使用的浏览器。它是HTTP协议中的一个字段,在用户访问站点时,服务器通过该字段就可区分是什么浏览器访问的网站。目前主流的浏览器基本上都是IE和Chrome两种内核的,每个浏览器、知名的爬虫都有其固定的User-Agent[2],因此只要知道这些浏览器或者知名爬虫的User-Agent就可以伪装成该浏览器访问站点。但知名的爬虫一般都有固定的IP,如搜索引擎的爬虫,不容易伪装。因此伪装浏览器的User-Agent是目前比较主流的伪装方法之一,因为浏览器下载后任何人都可以使用,没有固定的IP地址。

当访问一个服务器过于频繁时,单一的User-Agent会被服务器识别为异常访问,需要不断的更换不同浏览器的User-Agent来进行反爬,以下是两个不同内核的浏览器User-Agent。版本不同也就意味着所使用的浏览器不同,因此除了切换不同内核之外,还可以选择不同版本的User-Agent。

Chrome内核:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36(KHTML, like Gecko)Chrome/63.0.3239.132 Safari/537.36

IE内核:Mozilla/5.0(compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

有的网站在进行反爬虫检测时,会将Refer与User-Agent一起检测。Refer代表的意思是这个页面是从哪里跳转过来的,如从www.baidu.com跳转到https://www.sina.com.cn/,Refer就是www.baidu.com。百度统计网站流量来源时就是依靠这个字段。有些站点在收到爬虫的访问请求时候会做识别,不是要求内的Refer则不能访问该页面,Refer输入错误也会导致无法访问该页面。一般来说,使用目标站点的首页地址作为Refer就可以了。

3 设置爬虫爬取频率

爬虫在一定时间内的爬取量是检验一个爬虫效率的重要标准之一,因此为了加快爬虫的爬取效率,一般在使用爬虫时会采用多线程或多进程的方式来对爬虫节点的CPU内存带宽等资源进行充分利用,理论上在目标站点服务器没有做访问限制的前提下,只要爬虫节点的内存带宽资源足够,采用多进程或多进程的爬虫爬取效率将会直线上升。一般来说,普通用户访问一个网站时往往需要10秒以上,在没有做出限制时爬虫一秒能够爬取上百个页面。上文提过,这样的频繁访问会导致目标站点服务器崩溃,因此在实际使用中,网站的服务器往往会对爬虫一段时间内的访问请求次数做出限制,如果超过限制的阀值,则判定该访问是一个爬虫行为,对其封禁或采取其他限制。降低爬虫的爬取频率在一定程度上是尽可能的模拟出真人访问一个普通网站的行为[3],但将爬虫的频率降得太低会影响爬虫的爬取效率,在爬取过程中,需要通过不断的测试找到网站的阀值限制,在对爬虫的程序进行修改。在Python中可以直接使用tme.sleep函数进行延时设置。本项目中通过设置间隔抓取时间从而达到降低爬取频率的目的。

4 設置代理IP池

与降低爬取频率相比,设置代理IP池是以效率为先。在爬虫高频的爬取时,网站服务器会封禁其主机IP,而为了解决这个问题,人们往往使用与模拟User-Agent相似的方法,设置代理服务器,不断的更换主机的IP及访问端口,以解除网站服务器对爬虫的限制。设置代理服务器的方式有两种:(1)购买可以拨号更改IP的VPN服务。(2)使用代理池中IP不断更换IP。第二种方式是目前比较主流的。IP代理池可从网上找到开源的免费代理IP池或自建代理IP池,但这类型的IP往往稳定性较差,不可用的几率很高,如果只是进行简单的数据爬取,自建IP池能够满足需要,当爬取量巨大且爬取周期较长时,自建IP和开源免费的IP往往是不够用的。所以需要购买服务商提供IP池服务,在爬取时提取IP池中大量的IP进行更换使用。Python在urllib.request库中封装了ProxyHandler[4]函数来设置使用代理服务器。

5 其他反爬策略

目前进行反爬的主流方式还有通过官方API获取及混合反爬两种方式。(1)API获取。数据目前已经成为了一种资产,各行业各公司在对数据进行保护时,也有很多公司选择性的对用户开放,以供数据相关从业者或者专家学习研究,这些数据往往会封装成统一的对外API接口,数据从业者可从该接口获取那些不容易提取的网站数据。目前大型的网站基本都提供了API接口服务,如国外的Facebook,Instagram,国内的微博、腾讯、百度等网站。当有从API中获取数据的需求时,可以在官方网站上进行API接口的申请,在通过相关的资质认证后,就能通过调用相关API接口来完成数据获取的操作。因为接口是官方提供的,使用API来进行目标数据获取的好处显而易见:避开了网站的各种反爬限制,直接进行数据获取,减少项目中在反爬部分精力投入。但使用API进行获取时,缺点也十分突出,只能从接口获取官方规定好的字段,未加入数据获取的无法从接口处获取。如Facebook在获取数据时,API仅提供了文章的基本数据,而用户的信息是禁止获取的。(2)混合反爬。混合反爬指的是在同一项目中使用了多种反爬方法进行数据获取,一个项目可能会需要两种以上的方法共同完成爬取任务,同时过程中需要不断的测试才能得出适合的反爬策略。在实际的项目爬取过程中,因为每个网站所采用的反爬策略并不是单一的,因此会遇到各种混合搭配的反爬问题,如有的网站需要模拟登陆的同时还需要进行网页重定向处理,有的网站需要降低爬取频率,同时还需要不断更换代理,headers等。

6 结束语

本文主要研究了目前主流的几种反爬策略,在进行实际的项目爬取的时候,根据网站的不同,我们先通过观察测试找出该网站的爬虫限制策略,然后使用相应的反爬策略进行数据获取。

参考文献:

[1]逄菲.基于Python的分布式网络爬虫系统的设计与实现[J].电子技术与软件工程,2018(23):6.

[2]陈利婷.大数据时代的反爬虫技术[J].电脑与信息技术,2016,24(6):60-61.

[3]刘石磊.对反爬虫网站的应对策略[J].电脑知识与技术,2017,13(15):19-21,23.

[4]王星,刘李敦.基于移动代理(Agent)的智能爬虫系统的设计和实现[J].科技资讯,2007.

猜你喜欢

网络爬虫
基于分布式的农业信息检索系统的设计与实现
微信平台下的教务信息获取和隐私保护方法研究
基于网络爬虫的电子易购软件设计与实现
搜索引擎技术的发展现状与前景
炼铁厂铁量网页数据获取系统的设计与实现
基于社会网络分析的权威网页挖掘研究
主题搜索引擎中网络爬虫的实现研究
浅析如何应对网络爬虫流量
基于淘宝某商品销售量监控系统
网络爬虫针对“反爬”网站的爬取策略研究