第一章      认识网络爬虫

1.1 什么是网络爬虫

网络爬虫: 一种按规则,自动请求网站并提取网页数据的程序或脚本

网络爬虫分类(按照系统结构和技术划分):

1.通用网络爬虫

2.聚焦网络爬虫

3.增量式网络爬虫

4.深层网络爬虫

1.通用网络爬虫

通用网络爬虫:访问全互联网资源

主要用于将互联网中的网页下载到本地,形成一个互联网网页的备份.这类爬虫对速度和存储空间要求高,对抓取网页顺序要求不高

2.聚焦网络爬虫

聚焦网络爬虫:选择性的访问那些与目标主题相关的网页

只访问与目标主题相关的网页,在一定程度上节省了网络资源

3.增量式网络爬虫

增量式网络爬虫:只抓取新产生或发生变化的网页

只抓新的和变化的网页,不重复抓不变的网页,减少访问时间和存储空间的消耗,但是实现难度大,技术要求高

4.深层网络爬虫

深层网络爬虫:抓取深层网页

抓取的网页层数较深,实现难度大

扩展:网页按存在方式划分,分为表层和深层.表层网页可直接通过超链接访问, 深层网页不能通过链接访问,需要提交关键字,比如注册后的网页

实际运用中网络爬虫系统通常由以上四种爬虫结合使用

1.2 网络爬虫的应用场景

大多数依赖数据支撑的应用场景都需要爬虫,包括搜索引擎, 舆情分析与监测,聚合平台,出行类软件等

1.搜索引擎

谷歌,百度,必应等搜索引擎利用爬虫从互联网中采集海量数据

2.舆情分析与监测

政府或企业通过爬虫采集论坛评论,博客,新闻媒体,微博等的数据,发掘热点,并进行舆情控制和引导

3.聚合平台

聚合平台如返利网,慢慢买等运用爬虫对一些电商平台的商品信息进行采集,并放在自己的平台,横向对比,帮用户寻找实惠的商品价格

4.出行类软件

出行类软件,如飞猪,携程,去哪儿等 用爬虫访问官方售票网站刷新余票,有余票时通知用户付款买票.(官方售票网站不欢迎此行为,容易造成网站瘫痪)

1.3网络爬虫的合法性探究

爬虫的抓取行为经常会给网站增加压力,严重时可能影响对网站的正常访问,为了约束爬虫的恶意行为,网站加入反爬措施来阻止爬虫,同时,爬虫也研究了网站防爬的应对策略

1.3.1robots协议

为了维护网络环境,保证网站与爬虫之间的利益平衡,爬虫设计者及爱好者发布了行业规范---robots协议/爬虫协议,网站管理员在网站根目录放一个符合robots协议的robots.txt文件,告知爬虫哪些数据可以爬,哪些数据禁止爬取.

当爬虫访问网站时,先检查根目录是否存在robots.txt文件,如果存在,就按照文件内容爬取相应内容,如果不存在,则可以爬取所有没有口令保护的页面

在网站链接后面加robots.txt即可查看robots.txt文件.比如访问豆瓣获取robots文件                https://www.douban.com/robots.txt  内容如下

User-agent: *
Disallow: /subject_search
Disallow: /amazon_search
Disallow: /search
Disallow: /group/search
Disallow: /event/search
Disallow: /celebrities/search
Disallow: /location/drama/search
Disallow: /forum/
Disallow: /new_subject
Disallow: /service/iframe
Disallow: /j/
Disallow: /link2/
Disallow: /recommend/
Disallow: /doubanapp/card
Disallow: /update/topic/
Disallow: /share/
Disallow: /people/*/collect
Disallow: /people/*/wish
Disallow: /people/*/all
Disallow: /people/*/do
Allow: /ads.txt
Sitemap: https://www.douban.com/sitemap_index.xml
Sitemap: https://www.douban.com/sitemap_updated_index.xml
# Crawl-delay: 5User-agent: Wandoujia Spider
Disallow: /User-agent: Mediapartners-Google
Disallow: /subject_search
Disallow: /amazon_search
Disallow: /search
Disallow: /group/search
Disallow: /event/search
Disallow: /celebrities/search
Disallow: /location/drama/search
Disallow: /j/

robots.txt中通过空行分隔的语句组成一条记录,每条记录通常由User-agent开头,后面指定了爬虫名称,其中*针对所有爬虫,比如示例第一行(*只能出现一次).

User-agent下面的Disallow与Allow则分别指定该爬虫不被允许和允许爬取的目录.在整个robots.txt中至少一条Disallow.

Sitemap是网站地图的路径.主要说明网站更新时间,更新频率网址重要程度等信息

扩展:robots协议是君子协议,没有实际约束,对于某些不讲武德的爬虫来说,没有太大作用尽管robots没有强制约束力,但是我们也要遵守协议,违背协议可能会吃牢饭.

1.3.2防爬虫应对策略

尽管有robots协议约束爬虫,但总有很多爬虫不讲武德,经常发送多个请求重复访问网站,给网站造成很大压力.

因此网站管理员也会根据爬虫的特点,从来访客户端程序中选出爬虫,并采取防爬措施阻止爬虫访问.于此同时爬虫也采取一些应对策略继续访问网站.

常见应对策略包括添加User-Agent字段, 降低访问频率,设置代理服务器,识别验证码等

1.添加User-agent字段

浏览器访问网站时携带固定的User-agent(用户代理,用来描述浏览器类型/版本,操作系统/版本,浏览器插件,浏览器语言等信息),向网站表明身份

爬虫访问网站时也可以模拟浏览器行为,在请求时携带User-agent,将自己伪装成一个浏览器.如此可蒙混过关,避免被拒绝访问

2.降低访问频率

一个账户在短时间多次访问网站,可能被运维发现是爬虫,从而被加入黑名单禁止访问网站.爬虫可通过降低访问频率,减少被运维发现的风险.此方法会降低爬虫效率,为弥补这个不足,可适当调整操作,如爬一次页面休息几秒,或限制每天抓取的网页数量.

3.设置代理服务器

爬虫反复使用一个ip访问网站时,容易被网站识别身份后屏蔽,封禁.此时可通过在爬虫和web服务器(网站)之间设置代理服务器.爬虫先发请求给代理服务器,代理服务器再发给web服务器(网站).这时web服务器记录的就是代理服务器的ip.

4.识别验证码

有些网站监测某个客户端的ip访问过于频繁,会提供验证码,让客户登录验证.对于这种情况,爬虫除了输入账号密码,还要像实际登录一样,通过滑动,点击等,识别验证码.如此才能继续访问网站,由于验证码种类多,不同验证码通过不同的技术识别,具有一定技术难度.

1.4爬虫的工作原理和流程

1.4.1爬虫的工作原理

互联网中的多种爬虫尽管使用场景不同,但工作原理大同小异,下面介绍两种爬虫工作原理

1.通用网络爬虫工作原理

爬虫从一个或多个初始url开始,获取对应的网页数据,并不断从该网页数据获取新的url放入队列直到满足一定条件后停止.工作原理如下图

1.获取初始url:初始url是精心挑选的单个/多个url.可以由用户指定,也可以由待采集的初始网页指定

2.抓取页面,获取新的url:抓取初始url对应的网页,将网页存储到初始网页数据库,抓取的同时对网页进行解析,获取新的url

3.将新的url放入url队列

4.若爬虫满足设置的停止条件,就停止采集,若不满足,则继续抓取新的url对应的网页,循环执行.如果没有设置停止条件,爬虫会一直执行,直到没有采集到新的url

2.聚焦网络爬虫工作原理

聚焦网络会根据一定的算法对网页进行筛选,保留与主题相关的url舍弃与主题无关的url.其目的性更强.工作原理如下图

1.根据需求确定爬虫的采集目标,进行相关描述

2.获取初始url

3.根据初始url抓取网页,获取新的url

4.过滤掉与采集目标无关的url

5.将过滤后的url放入队列

6.根据抓取策略,确认url优先级.并确定下一步要抓取的url

7.把下一步要抓的url读取出来.准备根据url抓取新的网页

8.若满足停止条件或没有新的url,停止抓取,不满足停止条件则继续抓,一直循环

1.4.2爬虫爬取网页的流程

下面是爬虫爬取网页的流程图

1.选择一些网页将网页的链接(url)作为种子url放入待抓取的url队列

2.从待抓取的url队列中依次读取url

3.通过DNS解析url,把url地址转换为ip

4.将服务器ip和网页的相对路径给网页下载器

5.下载器将网页内容下载至本地

6.将下载的网页存储到页面库,等待建立索引并等待后续处理.同时将下载过的ur放入已抓取队列

7.从刚下载的网页中抽取url

8.检查抽取的url是否在已抓取url队列,如果没有,放入待抓取队列

重复以上循环,直到抽取的url为空

1.5网络爬虫实现技术探究

1.5.1网络爬虫的实现技术

为满足用户快速采集数据,市面上出现一些可视化界面的爬虫工具.如八爪鱼采集器,火车头采集器等.除此之外也可以自己开发爬虫工具.目前开发爬虫的工具主要有php,go,c++,java, python,后文用python编写爬虫,所以单独介绍一下python

python在网络爬虫方向已经有完善的生态圈子,拥有较强的多线程处理能力,但网页解析能力不够强大

选择python的原因:

语法简洁

容易上手

开发效率高:爬虫的代码 需要根据不同的网站内容进行局部修改,非常适合python这样灵活的语言去实现

模块丰富:python有丰富的内置模块,第三方模块,以及成熟的框架,能够帮开发快速实现爬虫的基本功能.

1.5.2python实现网络爬虫的流程

互联网上虽然有千奇百怪的网页,但使用python开发爬虫的基本流程都是一样的.流程如下

1.抓取网页数据

根据url向网站发请求并获取数据,(类似于浏览器输入网址,获取页面内容)

2.解析网页数据

采用不同的解析方法在整个网页数据中提取出想要的数据

3.存储数据

将提取的数据存在在本地或数据库,方便后期对数据进行研究

本章小结:

爬虫的概念,应用场景,robots协议,防爬应对策略,爬虫工作原理,抓取网页的详细流程,爬虫的实现技术python,python实现爬虫的流程

第一章 爬虫(认识网络爬虫)相关推荐

  1. 《数学之美》第9章 图论和网络爬虫

    1 图论 图论的起源可追溯到大数学家欧拉所处的那个年代. 图论中所论的图由一些节点和连接这些节点的弧组成. 广度优先搜索(Breadth-First Search, 简称BFS) 深度优先搜索(Dep ...

  2. 什么是网络爬虫,网络爬虫的职能是什么?

    什么是网络爬虫,网络爬虫的职能是什么.网络蜘蛛即Web Spider,是一个很形象的名字.把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页,从 ...

  3. 什么叫爬虫python_网络爬虫是什么?

    互联网诞生之初,是为了让人们更容易的分享数据.交流通讯.互联网是桥梁,连接了世界各地的人们.网站的点击.浏览都是人为的,与你聊天的也是活生生的人.然而,随着技术的发展,人们对数据的渴望,出现了各种网络 ...

  4. python网络爬虫的项目背景_第四章 Python即时网络爬虫项目: 内容提取器的定义

    1. 项目背景 在python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作中 ...

  5. java https 网络爬虫_Java 网络爬虫,就是这么的简单

    这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑 ...

  6. python 网页爬虫nike_python网络爬虫-爬取网页的三种方式(1)

    0.前言 0.1 抓取网页 本文将举例说明抓取网页数据的三种方式:正则表达式.BeautifulSoup.lxml. 获取网页内容所用代码详情请参照Python网络爬虫-你的第一个爬虫.利用该代码获取 ...

  7. java爬虫(本地爬虫和网络爬虫)

    前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客 一.本地爬虫 1.这是爬取的是本地的数据,可以按照步骤来进行,用的是正则表达式的方式去爬取的 Pattern:表示正则表达式 Matche ...

  8. python外国网站爬虫_Python3网络爬虫(一):利用urllib进行简单的网页抓取

    一.预备知识 1.Python3.x基础知识学习: 可以在通过如下方式进行学习: (1)廖雪峰Python3教程(文档): (2)菜鸟教程Python3教程(文档): (3)鱼C工作室Python教程 ...

  9. 爬虫(一)网络爬虫/相关工具与知识

    网络爬虫 网络爬虫(web crawler), 以前经常称为网络蜘蛛(spider), 是按照一定的规则自动浏览万维网并获取信息的机器人程序(或叫脚本), 曾经被广泛的应用于互联网搜索引擎. 使用过互 ...

最新文章

  1. html点击散点图的点显示一个文本,javascript – D3.js中的简单散点图示例?
  2. Fluid 0.5 版本:开启数据集缓存在线弹性扩缩容之路
  3. python module是干什么的_如何最简单、通俗地理解Python的模块?
  4. API网关Ocelot 使用Polly 处理部分失败问题
  5. 浏览器崩溃_字节跳动程序员28岁身价上亿,财务自由宣布退休;微软最新系统再迎“喜报”:更多用户的浏览器开始崩溃...
  6. Centos7 防火墙操作及端口查询
  7. oracle查询耗资源的进程,常用Oracle进程资源查询语句(运维必看)
  8. HDU 1017 A Mathematical Curiosity 数学题
  9. Resnet残差网络学习
  10. PostgreSQL 创建数据库
  11. AutoCAD 2018安装教程
  12. edge浏览器安装扩展插件报错:出现错误Download interrupted
  13. 计算机职称photoshop,职称计算机考试photoshop核心通关技巧
  14. MTK6577+Android4.0之增加重启功能
  15. 一行 Python 代码能实现什么丧心病狂的功能?
  16. 微信营销为什么会用到微信公众号客服系统?
  17. linux查找与替换练习
  18. 【离散数学】点割集(割点集)与边割集详解
  19. Delaunay三角剖分及matlab实例
  20. 蓝牙模块通信c语言,求一个蓝牙模块发送数据的例子

热门文章

  1. 【JavaSE】Lambda表达式、接口组成更新、方法引用
  2. 云脉智慧门禁搭载社区O2O服务,将服务深入到住户
  3. 分数统计设计java程序_(windows综合程序)设计一个学生平时成绩统计软件 最后的Java作业...
  4. php数据统计模板,PHP如何使用Echarts生成数据统计报表
  5. 视频音轨音量是否为0检测过程
  6. 计算机组成原理——加减运算 溢出判断
  7. c语言调用延时子程序的例子,C语言精确延时.doc
  8. jQuery邮票人 --> 案例
  9. 代码 bug 嗅探器:Sanitizer
  10. 【饭谈】面试场上的珍珑棋局(PUA之无限打击)