爬虫之静态网页爬虫(基础知识)

1.环境搭建-Python Unix                               基础环境-Windows

  1.pip,并设置pip源                                1.直接下载Anaconda,很多比较难以安装的资源都已经包含了

   配置pip conf,自动设置源                             配置pip源,各个系统默认pip.ini位置不同,需要根据实际情况设置

    #mkdir ~/.pip/                                   官网:http://anaconda.org/

    #vim~/.pip/pip.conf                                下子主页:https://www.continuum.io/downloads

    [global]

    index-url=http://pypi.tuna.tsinghua.edu.cn/simple

  也可以每次安装的时候制定source

    #pip install -i http://pypi.tuna.tsinghua.edu.cn/simple xlml

2.http协议

  物理层:电器连接

  数据链路层:交换机(可以为接入交换机的任意两个网络节点提供独享的电信号通路)、

        STP(生成树协议,可以应用于在网络中建立树形拓扑,消除网络中的二层环路,并且可以通过一定的方法实现路径冗余)、

        帧中继(公共或专用网上的局域网互联等,是一种数据包交换通信网络)

  网络层:路由器、IP协议

  传输层:TCP、UDP协议

  会话层:建立通信连接、网络拨号

  表示层:每次连接只处理一个请求

  应用层:HTTP、FTP

  (无连接:每次连接只处理一个请求)

  (无状态:每次连接传输都是独立的)

3.HTTP HEADER(header)

  REQUEST(request)部分的HTTP HEADER                              RESPONSE(response)部分的HTTP HEADER

  Accept:text/plain                                           Accept-Patch:text/example;charset=utf-8 

  Accept-Charset:utf-8                                         Cache-Control:max-age=3600

  Accept-Encoding:gzip,deflate                                      Content-Encoding:gzip

  Accept-Language:en-US                                         Last-Modified:Tue,15 Nov 1994 12:46:13 GMT

  Connection:keep-alive                                           Content-Language:da

  Content-length:348                                          Content-Length:348

  Content-type:application/x-www-form-urlencoded                             ETag:" 737060cd8c284d8af7ad3082f209582d"

  Date:Tue,15Nov,1994 08:15:48 GMT                                   Expires:Thu,01 Dec 1994 16:00:00 GMT

  Host:en.wikipedia.org:80                                        Location:http://www.w3.org/pub/WWW/people.html  

  User-Agent:Mozilla/5.0(x11;Linux x86-64;rv:12.0)Gecko/20100101 Firefox/21.0               Set-Cookie:UserID=JohnDoe;Max-Age=3600;Version=1             

  Cookie:$Version=1;Skin=new;                                      Status:200 OK

4.keep-alive

  HTTP是一个 请求<->响应 模式的典型范例,即客户端向服务器发送一个请求信息,服务器来响应这个信息。在老的HTTP版本中,每个请求都将被创建一个新的 客户端<->服务器 的连接,在这

  个连接上发送请求,然后接受请求。这样的模式有一个很大的优点,比较简单,很容易理解和编程实现;但也有一个很大的缺点,就是效率比较低,因此keep-Alive被踢出来用来解决效率低问题。

  keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,keep-Alive功能避免了建立或者重新建立连接。

  http/1.1

  默认情况下所在HTTP1.1中所有连接都被保持,除非在请求头或响应头中指明要关闭:Connection:Close

5.HTTP请求方法

    

6.HTTP响应状态码

  2xx  成功

  3xx  跳转

  4xx  客户端错误

  500  服务器错误

  http响应状态码300

    1.300 Multiple Choices   存在多个可用的资源,可处理或丢弃

    2.301 Moved Permanetly  重定向(通过各种方法将各种网络请求重新定个方向跳转到其它位置)

    3.302 Found        重定向

    4.304 Not Modified    请求的资源未更新,丢弃

  一些Python库,例如urllib2已结对重定向做了处理,会自动跳转;动态网页处理的时候,也是自动跳转,所以不需要单独处理

  http响应状态码400、500                                             错误处理:   

    1.400 Bad Request  客户端请求有语法错误,不能被服务器所理解                      400  检查请求的参数或路径

    2.401 Unauthorized  请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用            401     如果需要授权的网页。尝试重新登录

    3.403 Forbidden    服务器收到请求,但拒绝提供服务                           403  如果需要登录的网站,尝试重新登录;IP被封,暂停爬取,并增加爬虫的等待时间,如果拨号网络,尝试重新联网更改IP

    4.404 Not Found   请求资源不存在,例如:输入错误的URL                          404  直接丢弃                     

    5.500 Internal Server Error    服务器发生不可预测的错误                            5xx  服务器错误,直接丢弃,并技数,如果连续不成功,WARNING并停止爬取

    6.503 Server Unavailable  服务器当前不能处理客户端的请求,一段时间后可能恢复正常

7.HTML

  HTML是超文本标记语言,简单来说是可以认为是一个规范或者协议,浏览器根据HTML的语言规范来解析

  在HTML里,与爬虫先关的规范有以下:

    这一类tag标记了外链用来做抓取,而tr、p用来进行内容抽取

      tag:<a> <tr> <p>

    id、class用在css上的,能帮助我们定位元素,作用于tr  p类似:

      class:class=:“home-price”

      Id:id=‘price-frame’

8.DOM树

  DOM树最重要的作用是用来做网页数据分析及提取,我们可以充分利用TAG、CLASS、ID来找出某一类或某一个元素并提取内容

9.JavaScript

  JavaScript就是运行在前端的编程语言,最典型的用在动态网页的数据、内容加载及呈现上,JavaScript做网络请求的时候最常用的技术为AJAX,专门用来异步请求数据,这些数据是我们抓取的时候要用到的

10.爬虫的抓取对象类型

    1.静态网页

    2.动态网页

    3.web Service

    4.Web API数据获取

11.抓取的策略

    1.深度优先策略    2.宽度优先策略

  1.一般选用哪种策略?

    1.重要的网页距离种子站点比较近

    2.万维网的深度并没有很深,一个网页有很多路径可以到达

    3.宽度优先有利用多爬虫并行合作抓取

    4.深度限制与宽度优先相结合

  2.如何记录抓取历史?

    1.将访问过的URL保存到数据库    #效率太低

    2.用HashSet将访问过的URL保存起来。那只需接近O(1)的代价就可以查到一个URL是否被访问过了。#消耗内存

    3.URL经过MD5或SHA-1等单向哈希后再保存到HashSet或数据库

    4.Bit-Map方法,建立一个BitSet,将每一个URL经过一个哈希函数映射到某一位。

12.MD5函数

    MD5签名是一个哈希函数,可以将任意长度的数据转化为一个固定长度的数字(通常是4个整形,128位)。计算机不可能有2的128那么大的内存,因此实际的哈希表都会是URL,

    MD5再%n(即取模)。现实世界的URL组合必然超越哈希表的槽位数,因此碰撞是一定存在的,一般的HASH函数,例如Java的HashTable是一个HASH表再跟上一个链表,链表里

    存的是碰撞结果

      BITMAP记录方式

        将URL的MD5值再次哈希,用一个或多个BIT位来记录一个URL

          1.确定空间大小。例如:Facebook   1.5GB

          2.按倍增加槽位。例如:16GB

          3.HASH算法映射Python:mmh3 bitarray

        优势:对存储进行了进一步压缩,在MD5的基础上,可以从128位最多压缩到1位,一般情况,如果用4bit或者8bit表示一个url,也能压缩32或者16倍

        缺陷:碰撞概率增加

13.提高效率

    1.评估网站的网页数量

    2.选择合适的HASH算法和空间阈值,降低碰撞几率

    3.选择合适的存储结构和算法  

14.Bloom Filter

    Bloom Filter使用了多个哈希函数,而不是一个。创建一个m位BitSet,先将所有的位初始化为0,然后选择k个不同的哈希函数。第i个哈希函数对字符串str哈希的结果

    记录为h(i,str),且h(i,str)的范围是0到m-1。只能插入,不能删除。

15.如何有效的记录抓取历史?

    多数情况下不需要压缩,尤其网页数量少的情况

    网页数量大的情况下,使用Bloom Filter压缩

    重点是计算碰撞概率,并根据碰撞概率来确定存储空间的阈值

    分布式系统,将散列映射到多台主机的内存

16.网站结构分析

    Robots.txt

    网站对爬虫的限制

    利用sitemap来分析网站结构和估算目标网页的规模

17.有效抓取特定内容

    利用sitemap里的信息,直接对目标网页.html进行抓取

    对网站目录结构进行分析

    大多数网站都会存在明确的top-down的分类的目录结构,可以进入特定的目录进行抓取

 

  

 

posted @ 2019-03-08 14:31  jacky912  阅读(1474)  评论(0编辑  收藏  举报