大数据应用人才培养系列教材 数据清洗 刘 鹏 张 燕 总主编 李法平 主编 陈潇潇 副主编
第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题 大数据应用人才培养系列教材 第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题
7.1 网页结构 第七章 采集Web数据实例 1.1.1 DOM模型 (1)DOM简介 网页清洗的第一步是对页面结构的分析,页面结构分析在信息检索、分类、页面适应等方面都有重要作用。DOM模型是网页典型的“树形结构模型”。 DOM(Document Object Mode,文档对象模型)是W3C组织推荐的处理可扩展标记语言的标准编程接口(API)。DOM将整个页面映射为一个由层次节点组成的文件,而HTML的标记也具有一定的嵌套结构。通过HTML解析器(parse)可以将HTML页面转化为一棵DOM树。如图所示,为网页DOM结构。
7.1 网页结构 第七章 采集Web数据实例 1.1.1 DOM模型 (2)DOM树结构 DOM是由一组对象和存取、处理文档对象的接口组成,包括文档、节点、元素、文本节点、属性等。如图7-1所示,为DOM树模型的结构。 (3)访问DOM树结构 属性是节点(HTML元素)的值,可通过JavaScript(以及其他编程语言)对HTML DOM进行访问。 访问HTML元素等同于访问节点,用户可以以不同的方式来访问 HTML元素,表7-1为访问HTML元素的不同方法。
7.1 网页结构 DOM树结构 文档 节点 文本节点 元素 属性 图7-1 DOM结构元素 第七章 采集Web数据实例 根据 W3C 的HTML DOM标准,HTML 文档中的所有内容都是节点。DOM文档是由分层的节点对象构成,这些节点对象构成一个页面。文档是一个节点,该节点只有一个元素,这个元素就是它自己。 整个文档是一个文档节点,每个HTML元素是元素节点。 DOM树结构 元素 文本节点 元素是除文本之外的大多数对象,是从节点类型推导出来的。元素包含属性,而且可以是另一个元素的父类型。 HTML元素内的文本是文本节点,文本节点处理文档中的文本。 属性 每个 HTML 属性是属性节点,是元素的基本属性,因此它们不是元素的子节点。 图7-1 DOM结构元素
7.1 网页结构 DOM的优点 DOM的缺点 (4)DOM的优点和缺点 第七章 采集Web数据实例 (4)DOM的优点和缺点 DOM的优点 DOM的缺点 效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外,效率低还表现在大量地消耗时间,因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instruction和comment都创建一个对象,这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。 易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath。
7.1 网页结构 1.1.2 正则表达式 (2)规则 正则表达式一般由普通字符(例如字符“a”到“z”)以及特殊字符(称为“元字符”)组成。 第七章 采集Web数据实例 1.1.2 正则表达式 (2)规则 正则表达式一般由普通字符(例如字符“a”到“z”)以及特殊字符(称为“元字符”)组成。 普通字符 非打印字符 特殊字符:特殊字符是一些有特殊含义的字符,若要匹配这些特殊字符,必须首先使字符“转义”,即将反斜杠字符(\)放在它们前面 限定符:限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配 定位符:定位符用来描述字符串或单词的边界,它能够将正则表达式固定到行首或行尾,还可以用来创建出现在一个单词内、一个单词的开头或者一个单词的结尾的正则表达式
7.1 网页结构 1.1.2 正则表达式 (2)规则 正则表达式一般由普通字符(例如字符“a”到“z”)以及特殊字符(称为“元字符”)组成。 第七章 采集Web数据实例 1.1.2 正则表达式 (2)规则 正则表达式一般由普通字符(例如字符“a”到“z”)以及特殊字符(称为“元字符”)组成。 选择:用圆括号将所有选择项括起来,相邻的选择项之间用“|”分隔。但用圆括号会有一个副作用,相关的匹配会被缓存,此时可用“?:”放在第一个选项前来消除这种副作用。 反向引用:需要匹配两个或多个连续的相同的字符的时候,就需要使用反向引用。
7.1 网页结构 第七章 采集Web数据实例 1.1.2 正则表达式 (3)局限性 利用正则表达式来清洗网络数据具有很大局限性,因为正则表达式是完全依赖网页结构的。一旦网页布局发生变化,哪怕是一个小小的标记,也会导致数据清洗工作者费了很大时间、精力设计和调试的正则表达式失效。更多情况是,网页的结构是无法使用正则表达式来精确匹配的。
第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题 大数据应用人才培养系列教材 第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题
7.2 网络爬虫 第七章 采集Web数据实例 1.2.1 网络爬虫简介 网络爬虫(又被称为网页蜘蛛、网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫还有另外一些不常使用的名字,如蚂蚁、自动索引、模拟程序或者蠕虫等。 (1)网络爬虫的工作流程 网络爬虫的工作流程图如下图所示:
7.2 网络爬虫 1.2.1 网络爬虫简介 网络爬虫具体流程如下: 首先选取一部分种子URL 将这些URL输入待抓取URL队列 第七章 采集Web数据实例 1.2.1 网络爬虫简介 网络爬虫具体流程如下: 首先选取一部分种子URL 将这些URL输入待抓取URL队列 从待抓取URL队列中取出待抓取的URL,解析DNS,得到主机的IP地址,并将URL对应的网页下载下来,存储到已下载网页库中,再将这些URL放进已抓取URL队列 分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入抓取URL队列
如何编写网络爬虫呢?
01 7.2 网络爬虫 安装Python 1)下载Python程序安装包 第七章 采集Web数据实例 安装Python 1)下载Python程序安装包 打开Python官方网站https://www. python.org,找到Downloads区,单击进行下载。 2)执行Python安装包 注意,在安装Python过程中,集成开发环境IDLE是同Python一起安装,不过需要确保安装时选中了Tcl/Tk组件。 3)测试Python安装是否成功 测试Python安装是否成功,可用cmd打开命令行输入“python”命令。 01
02 7.2 网络爬虫 构造get请求爬取搜狗首页 步骤1:打开Python编辑器IDLE。 第七章 采集Web数据实例 构造get请求爬取搜狗首页 步骤1:打开Python编辑器IDLE。 步骤2:导入要使用的库 步骤3:获取目的网页响应的对象:使用urlopen方法打开目的网页,并返回网页响应对象fh,代码如下:>>>fh=urllib.request.urlopen("http://www.sogou.com") 步骤4:获取对象fh的内容data,代码如下: >>>data=fh.read() >>>data=data.decode("utf-8","ignore") 02 步骤5:将data写入本地sogoutest.HTML文件进行保存。在系统中创建HTML格式的文件sogoutest。>>>fh2=open("D:\Python35\sugoutest.HTML","w",encoding="utf-8") >>>fh2.write(data) >>>fh2.close()
7.2 网络爬虫 第七章 采集Web数据实例 模拟浏览器爬取糗事百科网 当用上述脚本爬取某些网站时,会出现“http.client.Remote Disconnected”错误提示,即远程主机关闭了连接。这是因为某些网站采用User-Agent用户代理机制来识别浏览器版本,而Python编写的脚本不具备浏览器属性。下面将介绍运用Python模拟浏览器进行爬虫的步骤。 03 步骤1:打开Python编辑器IDLE。 步骤2:导入要使用的库 >>>import urllib.request 步骤3:设置目的网页地址,代码如下所示: >>>url="https://www.qiushibaike.com/"
7.2 网络爬虫 第七章 采集Web数据实例 模拟浏览器爬取糗事百科网 04 步骤4:在Python中设置User-Agent字段值。此处将User-Agent设置成Chrome浏览器的用户代理。 >>>headers=("User-Agent","Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36") 步骤5:创建opener对象,并将headers报头信息加载到opener中,代码如下所示: >>>opener=urllib.request.build_opener() >>>opener.addheaders=[headers] 步骤6:再利用opener对象模拟Chrome浏览器爬取目的网页内容,代码如下所示: >>>data=opener.open(url).read() 再参照“构造get请求爬取搜狗首页”的步骤5将data数据存储到本地。
05 7.2 网络爬虫 构建get请求爬取百度搜索 第七章 采集Web数据实例 5)获取目的网页响应的内容 1)打开Python编辑器IDLE 05 5)获取目的网页响应的内容 采用Request方法将url2网址封装为一个get请求req,再使用urlopen方法打开req,通过read方法读取内容. >>>req=urllib.request.Request(url2) >>>data=urllib.request.urlopen(url2).read 6)将data写入本地baidusearch.HTML文件进行保存 >>>fh=open("D:/Python35/baidusearch.HTML","bw") >>>fh.write(data) >>>fh.close() 2)导入要使用的库,代码如下所示 >>>import urllib.request 3)设置待检索关键词 >>>key="Python 学习方法" >>>key_code=urllib.request.quote(key) 4)生成目的网址 >>>url2=url+key_code
06 7.2 网络爬虫 构建post请求爬取网页 步骤1:打开Python编辑器IDLE 步骤2:导入要使用的库,代码如下所示: 第七章 采集Web数据实例 构建post请求爬取网页 06 步骤1:打开Python编辑器IDLE 步骤2:导入要使用的库,代码如下所示: >>>import urllib.request >>>import urllib.parse 步骤3:设置目的网址。 步骤4:设置post请求数据。post请求数据应为输入登录表单的账号、密码。 >>>postdata=urllib.parse.urlencode({"name":"admin","pass":"123456"}).encode ('utf-8') 步骤5:构造post请求。 >>> req=urllib.request.Request(url,postdata)
07 7.2 网络爬虫 构建post请求爬取网页 步骤6:模拟浏览器。将User-Agent的内容加载到post请求的头部。 第七章 采集Web数据实例 构建post请求爬取网页 07 步骤6:模拟浏览器。将User-Agent的内容加载到post请求的头部。 >>> req.add_header('User-Agent','Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ 46.0.2490.76 Mobile Safari/537.36') 步骤7:获取目的网页响应内容。 >>> data=urllib.request.urlopen(req).read() 步骤8:将data写入本地文件并保存。 >>> fh3=open("D:/Python35/post_login.HTML","bw") >>> fh3.write(data) >>> fh3.close()
08 7.2 网络爬虫 爬取多页网页内容 第七章 采集Web数据实例 5)提取用户和内容信息 1)打开Python编辑器IDLE 6)遍历contentlist中的内容,并将内容赋值给变量name。name的形式为content1、content2、content3等 7)遍历userlist中的内容,并通过exec()函数,输出content1、content2等变量对应的值 8)获取多页网页内容。 2)导入要使用的库,代码如下所示 >>>import urllib.request >>>import re 3)步骤3:爬取某一页的具体内容。 >>>def getcontent(url,page) 4)模拟浏览器,获取目的网页响应内容 >>>headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36") >>>opener=urllib.request.build_opener() >>>opener.addheaders=[headers] >>>data=opener.open(url).read().decode("utf=8")
7.2 网页爬虫 第七章 采集Web数据实例 1.2.2 网络爬虫异常处理 异常处理:当通过几十个代理IP实现爬虫操作时,如果其中一个代理IP突然不响应了就会报错,并且这种错误触发率极高。但是一个出问题并不会影响到整个脚本的任务,所以当捕获到此类异常的时候,直接忽略即可。 URLError:通常,在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况,就会触发URLError。这种情况下,异常通常会包含一个由错误编码和错误信息组成的reason属性。 HTTPError:HTTPError是URLError的子类,服务器上每一个HTTP的响应都包含一个数字的“状态码”。有时候状态码会指出服务器无法完成的请求类型,一般情况下Python会自动处理一部分这类响应,如果有一些无法处理的,就会抛出HTTPError异常。这些异常包括典型的404(页面不存在),403(请求禁止)和401(验证请求)。
第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题 大数据应用人才培养系列教材 第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题
7.3 行为日志采集 第七章 采集Web数据实例 1.3.1 用户实时行为数据采集 用户行为日志采集是网站数据分析的第一步。而采集工具需要收集用户浏览目标网站的行为(如打开网页、停留时间、单击按钮、打开次数、客户端IP、业务流步骤等)及行为附加数据(浏览器、操作系统、Cookies等)。 (1)JavaScript埋点进行数据收集 利用JavaScript埋点进行数据收集的基本流程如下图所示:
7.3 行为日志采集 1.3.1 用户实时行为数据采集 (1)JavaScript埋点进行数据收集 具体步骤操作如下所示: 第七章 采集Web数据实例 1.3.1 用户实时行为数据采集 (1)JavaScript埋点进行数据收集 具体步骤操作如下所示: ① 用户的行为(比如打开网页)触发浏览器对被统计页面的一个HTTP请求。 ② 页面中埋点的JavaScript片段会被执行,指向一个独立的JS文件,会被浏览器请求并执行,也就是数据采集过程。 ③ 数据收集完成后,会将收集到的数据通过HTTP参数的方式传递给后端脚本,后端脚本解析参数并按固定格式记录到访问日志,同时可能会在HTTP响应中给客户端种植一些用于追踪的Cookie。
7.3 行为日志采集 1.3.1 用户实时行为数据采集 (2)JS埋点案例 第七章 采集Web数据实例 1.3.1 用户实时行为数据采集 (2)JS埋点案例 JS埋点通过使用JS收集客户端的Cookie信息,发送到后台一组服务器。例如借助新浪IP地址库,显示本地城市名称代码如下: <script src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js" type="text/ecmascript"></script> remote_ip_info.country remote_ip_info.province remote_ip_info.city 然后依次获取客户端IP、获取用户的访问开始时间、访问结束时间,以及用户与网站的交互时间、获取单击按钮事件。
7.3 行为日志采集 1.3.2 用户实时行为数据分析 (1)行为日志采集相关技术 第七章 采集Web数据实例 1.3.2 用户实时行为数据分析 (1)行为日志采集相关技术 Flume:Flume是Cloudera提供的一个分布式、高可靠的、高可用的海量日志采集、聚合 和传输的系统,它将各个服务器中的数据收集起来并送到指定的地方; Kafka:Kafka是一种高吞吐量的分布式发布-订阅消息系统,最初由LinkedIn公司开发,之 后成为Apache项目的一部分。 Nginx:Nginx(读作“engine x”)是一款轻量级、高性能的Web 服务器/反向代理服务 器及电子邮件(IMAP/POP3)代理服务器。 Hadoop:Hadoop实现了一个分布式文件系统(Hadoop Distributed File System, HDFS)。 Storm:Storm是由BackType开发的开源的分布式实时处理系统,支持水平扩展,具有高容 错性,保证每个消息都会得到处理。
7.3 行为日志采集 1.3.2 用户实时行为数据分析 (2)用户实时行为数据分析流程 用户实时行为数据分析流程如下图所示: 第七章 采集Web数据实例 1.3.2 用户实时行为数据分析 (2)用户实时行为数据分析流程 用户实时行为数据分析流程如下图所示:
7.3 行为日志采集 1.3.2 用户实时行为数据分析 (2)用户实时行为数据分析流程 用户实时行为数据分析流程具体步骤如下: 第七章 采集Web数据实例 1.3.2 用户实时行为数据分析 (2)用户实时行为数据分析流程 用户实时行为数据分析流程具体步骤如下: ① Web或WAP通过网页埋点实时发送用户行为数据至日志采集后端Server,App直接调用 http接口,Server通过Logback输出日志文件。 ② Flume通过tail命令监控日志文件变化,并通过生产者消费者模式将tail收集到日志推送至 Kafka集群。 ③ Kafka根据服务分配Topic,一个Topic可以分配多个Group,一个Group可以分配多个 Partition。 ④ Storm实时监听Kafka,流式处理日志内容,根据特定业务规则,将数据实时存储至Cache, 同时根据需要可以写入HDFS。 ⑤ Kafka直接写入HDFS。
第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题 大数据应用人才培养系列教材 第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题
7.4 上机练习与实训 实训题目:免费网站用户行为采集工具的使用 第七章 采集Web数据实例 实训题目:免费网站用户行为采集工具的使用 实训原理:Google Analytics(Google分析,简称GA)是Google的一款免费的网站分析服务。GA功能非常强大,它创新性地引入了可定制的数据收集脚本,可以分析出来访用户信息、访问时间段、访问次数、页面跳出率等信息,并且还提供丰富详尽的图表式报告。国内的百度统计、搜狗分析等产品均沿用了谷歌分析的模式。 实训内容: (1)注册GA账号。 (2)网站埋点GA码。 (3)网站用户行为采集。 (4)网站用户行为数据分析。 实训指导详见课本内容。
第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题 大数据应用人才培养系列教材 第七章 采集Web数据实例 7.1 网页结构 7.2 网络爬虫 7.3 行为日志采集 7.4 上机练习与实训 习题
习题: 1.用正则表达式将下面的URL分解为协议(ftp、http等)、域地址和页/路径。http://www.runoob.com:80/HTML/HTML-tutorial.HTML
AIRack人工智能实验平台 ——一站式的人工智能实验平台 DeepRack深度学习一体机 ——开箱即用的AI科研平台 BDRack大数据实验平台——一站式的大数据实训平台
云创公众号推荐 刘鹏看未来 云计算头条 中国大数据 深度学习世界 云创大数据订阅号 云创大数据服务号 高校大数据与人工智能 微信号:lpoutlook 云计算头条 微信号:chinacloudnj 中国大数据 微信号:cstorbigdata 深度学习世界 微信号:dl-world 云创大数据订阅号 微信号:cStor_cn 云创大数据服务号 微信号:cstorfw 高校大数据与人工智能 微信号:data_AI
手机APP推荐 我的PM2.5 随时随地准确 查看身边的 PM2.5值 同声译 支持26种语言 互译的实时翻 译软件 我的南京 云创大数据为路 况大数据应用提 供技术支持 科技头条 汇聚前沿资讯 的科技情报站
网站推荐 万物云 智能硬件大数据免费托管平台 环境云 环境大数据开放共享平台
感谢聆听