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


    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的分类的目录结构,可以进入特定的目录进行抓取

     

      

  • 相关阅读:
    【转载自酷壳】编程能力与编程年龄
    xcode中的nslog数据格式
    xcode 的 pch 预编译头文件
    获取App的Documents路径
    使用gdb调试app
    收集的一些OC知识点
    收集到的几篇看雪学院文章
    【转】iOS平台的应用程序调试与分析
    前端技术开发的一些建议
    UIImage的两种加载方式
  • 原文地址:https://www.cnblogs.com/jacky912/p/10495646.html
Copyright © 2020-2023  润新知