简单爬虫入门

通用网络爬虫[广度] 通用网络爬虫(General Purpose Web Crawler)又被称为全网爬虫(Scalable Web Crawler),爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。 由于商业原因,它们的技术细节很少公布出来。 这类网络爬 虫的爬行范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求相 对较低,同时由于待刷新的页面太多,通常采用并行工作方式,但需要较长时间才能刷新一 次页面。 虽然存在一定缺陷,通用网络爬虫适用于为搜索引擎搜索广泛的主题,有较强的 应用价值。而且通用爬虫必须遵循 ROBOT 协议----是一种约定的规范;针对通用爬虫进行 的数据采集限制。 聚焦网络爬虫[深度] 聚焦网络爬虫(Focused Crawler),又被称为主题网络爬虫(Topical Crawler)或者定向 爬虫,是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫。 和通用网络爬虫 相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面 也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求。 增量式网络爬虫 增量式网络爬虫(Incremental Web Crawler)是指对已下载网页采取增量式更新和只爬 行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能 新的页面。和周期性爬行和刷新页面的网络爬虫相比,增量式爬虫只会在需要的时候爬行新 产生或发生更新的页面 ,并不重新下载没有发生变化的页面,可有效减少数据下载量,及 时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。 增量式网络爬虫的体系结构[包含爬行模块、排序模块、更新模块、本地页面集、待爬行 URL 集以及本地页面 URL 集等。 累计式爬虫 累积式爬虫(Cumulative Crawler)类似于增量式爬虫,但是增量式爬虫爬取数据的时 ,如果之前爬取的数据发生变化,则重新爬取,而累计式抓取则不会。累积式爬虫是指从 某一个时间点开始,通过遍历的方式抓取系统所能允许存储和处理的所有网页。在理想的软 硬件环境 下,经过足够的运行时间,累积式抓取的策略可以保证抓取到相当规模的网页集 合。但由于 Web 数据的动态特性,集合中网页的被抓取时间点是不同的,页面被更新的情 况也不同,因此累积式抓取到的网页集合事实上并无法与真实环境中的网络数据保持一致。 Deep Web 爬虫 Web 页面按存在方式可以分为表层网页(Surface Web)和深层网页(Deep Web,也 称 Invisible Web Pages 或 Hidden Web)。 表层网页是指传统搜索引擎可以索引的页面, 以超链接可以到达的静态网页为主构成的 Web 页面。Deep Web 是那些大部分内容不能 通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的 Web 页 面。例如那些用户注册后内容才可见的网页就属于 Deep Web。 2000 年 Bright Planet 指 出:Deep Web 中可访问信息容量是 Surface Web 的几百倍,是互联网上最大、发展最快 的新型信息资源。

抓包工具
        我们发现进行数据采集的时候,经常需要查看请求的详情,这个就需要一些专业的抓包
工具来辅助我们完成了,目前市场上有很多这类工具,如 fiddler、Wireshark、burpsuit、chrome
浏览器的 network 插件等,这里我就选用 fiddler 为例给大家进行请求的抓取,因为 fiddler
主要用于抓取 web 请求,也就是 http 或者 https 等请求,简单方便,而 wireshark 是所有的
网络请求都可以抓取。
请求伪造—用户代理对象
        我们使用 fiddler 来抓取我们之前运行的代码,发现我们发送请求的 UA(UserAgent)是
Python-urllib/3.6,这就相当于告诉服务器,我使用 python 的 urllib 这个爬虫来获取你的数
据了,现在一般的项目都会有反爬机制,这样的请求会被拦截不让访问数据的,所以一般我
们需要伪造请求头对象

请求伪造—IP 地址
        使用爬虫爬取数据的时候,如果使用一个 IP 地址长时间或者频繁的方法服务器,这样
也容易触发服务器的反爬机制,所以我们在反反爬虫的时候,除了之前的伪造用户代理(UA)
之外,有时候也需要代理 IP 地址,这样就可以模拟多用户同时访问服务器,避免反爬机制
飞触发。
直接访问服务器:

代理分类 
        分为正向代理和反向代理,反向代理在 web 阶段我们已经学习过了,这个就不说了。
正向代理可以分为三种,即高度匿名代理、普通匿名代理和透明代理。
高度匿名代理
        隐藏客户的真实 IP,但是不改变客户机的请求,就像有个真正的客户浏览器在访问服务
器。此时服务器不知道这个是一个代理请求,只知道是一个请求。
普通匿名代理
        能隐藏客户机的真实 IP,会改变客户的请求信息,服务器端不知道你的 ip 地址但有可
能认为我们使用了代理。也就是说服务器无法知道客户端的 IP 地址,但是知道这个是一个
代理请求。
透明代理
        不但改变了我们的请求信息,还会传送真实的 IP 地址。就是说服务器端知道你的 ip 地
址,也知道代理服务器的 ip 地址,也知道你是代理请求。
使用代理 
        爬虫程序运行速度是很快,在网站爬取数据时,一个固定 IP 的访问频率就会很高,这不
符合人为操作的标准。所以一些网站会设置一个 IP 访问频率的阈值,如果一个 IP 访问频率
超过这个阈值,说明这个不是人在访问,而是一个爬虫程序。

GET 请求 
        GET 请求一般用于向服务器获取数据,在 urllib 中,默认就是使用的 get 请求,如下,
使用百度的搜索功能搜索一些关键字:
POST 请求 
          POST 请求相对于 get 请求而言,参数不是在 url 中,而是存在请求头的 body 体中,所
以 urllib 中 Request 对象中存在了一个 data 参数,一旦 data 参数有值,则 urllib 默认就使
用 POST 请求。

from urllib import re
爬虫异常的处理
        在进行目标网址的访问和数据采集过程中,由于目标网址拼写、网络阻塞等等各种问题,
可能会导致目标网址访问失败的情况,在 python 爬虫模块中,主要通过 URLError 类型来规
范定义爬虫访问 url 地址出现的问题,同时提供了继承自 URLError 的 HTTPError 类型专门针
对 HTTP 请求进行的异常行为的处理
        但是切记,一切服务器返回的异常行为,都是服务器内部直接出现错误行为并且返回错
误状态码导致的异常行为,如果服务器本身已经处理了访问的异常操作的话,爬虫程序是不
会得到异常数据的
在 urllib.error 模块中提供了大量的各种爬虫异常信息,我们可以通过异常捕获来判断爬
虫的异常,从而创建更加壮健的程序。
特殊的异常行为:HTTPS 数字签名
        所有的 HTTPS 安全网站,都会有自己的数字签名证书,由第三方数字证书认证中心发
放并管理,主要目的是防止请求数据被恶意篡改和伪造,通过双向非对称加密的方式保证数
据传输的安全性
        但是不是所有的网站都在第三方数字签名认证中心登记并颁发证书的,所以某些 https
开头的网站在访问的时候浏览器后提示不安全的信息提示,必须主动忽略警告信息才能正常
访问,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值