网络爬虫技术浅析

Posted 计算机与网络安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络爬虫技术浅析相关的知识,希望对你有一定的参考价值。

一次性付费进群,长期免费索取教程,没有费教程。

ID:Computer-network


,听起来似乎很智能,实际上也没那么复杂。可以简单地理解为使用某种语言(例如语言)按照一定的顺序、规则主动抓取特定信息的程序或者脚本。


1、网络爬虫实现原理

的原理很简单。第一步:使用的网络模块,比如urllib2、httplib、requests等模块,模拟浏览器向发送正常的http(https)请求。正常响应后,将收到包含所需信息的网页代码。第二步:使用过滤模块,比如lxml、html.parser、re等模块,将所需信息从网页代码中过滤出来。


在第一步中,为了使发送的http(https)请求更像是浏览器发送的,可以在其中添加header和cookies。为了欺骗的反,可以采取利用代理或间隔一段时间发送一个请求,以尽可能地避开反。

第二步的过滤比较简单,只需要熟悉一下过滤模块的规则就可以了。如果一个模块无法完全过滤有效信息(通常一个模块就足够了),可以采取多个模块协作的方式,特别是re模块,虽然使用起来比较复杂,但用于过滤非常有效。


虽然项目被称为,但实际上如何从上顺利地得到数据更加重要,毕竟今时不同往日了,随便上一个requests模块就能从网站得到数据的好日子已经一去不复返了。相对于得到数据而言,过滤数据要简单得多。

2、爬行策略

大多都不会是只爬行1页。如果只有1页的数据,那也无须什么了。直接用sed、awk、就好,效率更高。既然是多页那就涉及一个顺序问题,即先爬哪页、后爬哪页。


以一个最简单的为例。从程序出发,开始爬向多个页面,然后从页面中获取数据。这种形式有点类似于树状结构,如图1所示。

图1  爬虫示意图

爬行顺序的选择有点类似于二叉树,一个是深度优先,一个是广度优先,一般大多会采用深度优先的。这种是从出发,先请求Html1的数据,再从得到的数据中过滤得到Data1。然后请求Html2的数据,再过滤得到Data2,以此类推。个人常用的bs4基本都是采用这种方法。好处在于简单直观,非常符合人类正常的思维。也有采用广度优先的,那就是先将所有的网页数据收集完毕,然后一一过滤获取有效数据,只是采用这种方法的比较少见,Pyspider就是这种类型的。


这只是简单爬取单个网站的策略。如果是去爬大型网站或者多个网站,不会这么简单机械,可能需要根据网站的大小、网页的重要性以及权重等分成不同的等级来爬。比较知名的爬行策略有pagerank、opic等。


3、身份识别

在网络上,网站是如何识别用户身份的呢?答案是Cookie。


Cookie是指网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。比如说有些网站需要登录后才能访问某个页面,在登录之前,想抓取某个页面内容是不允许的,就可以利用urllib2库保存我们登录的Cookie,再抓取其他页面就达到目的了。在中,负责Cookie部分的模块为cookielib。

ID:Computer-network


【推荐书籍】