版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章数据采集与预处理概述“数据采集与预处理第1章数据采集与预处理.pptx第2章数据采集与存储.pptx第3章数据采集进阶.pptx第4章数据清洗.pptx第5章数据规整与分组聚合.pptx第6章豆瓣电影排行榜数据爬取与预处理.pptx第7章Scrapy与Selenium采集股市每日点评数据并可视化.pptx第8章房产数据预处理.pptx全套可编辑PPT课件目录CONTENTS数据采集简介1.1数据预处理简介1.2数据采集与预处理常用库1.3学习目标了解数据采集的工具与爬虫原理了解数据预处理的目的与意义了解数据采集与预处理的常用三方库有哪些了解爬虫的分类与基本流程了解数据预处理的流程与工具数据采集简介111.1数据采集简介数据据采集(Dataacquisition,DAQ)又称数据获取。所采集数据涵盖了从传感器或其它待测设备中所获取的传感器数据、社交网络数据、移动互联网数据等各种结构化、半结构化及非结构化类型的海量数据。
随着海量网络信息的增长和互联网技术的发展,人们对信息获取的需求日益增加。对于这些错综复杂的数据,需通过数据采集技术收集所需要的数据。数据采集作为数据分析生命周期的重要一环,是首先需要了解并掌握的技术。1.1.1数据采集的工具1.ApacheFlume2.Fluentd3.Logstash任何完备的数据平台,数据采集是必不可少的一步,在以大数据、云计算、人工智能为核心特征的数字化浪潮席卷全球,产生的数据量呈指数级增长的背景下,大数据的“5V”特征使得数据采集的挑战愈发突出,其分别为Volume(大体量)、Velocity(时效性)、Variety(多样性)、Value(高价值)与Veracity(准确性),如图所示。本节介绍四款主流数据采集工具:ApacheFlume、Fluentd、Logstash及Splunk,并重点关注它们进行数据采集的相关特性。4.Splunk1.1.1数据采集的工具
Flume是Apache旗下的一款高可用的,高可靠的,分布式的用于海量日志采集、聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时提供了数据的简单处理,并写到各种数据接收方(可定制)的能力。简单来说,Flume是一个实时采集日志的数据采集引擎。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIXtail)、syslog(syslog日志系统),exec(命令执行)等数据源上收集数据的能力,支持TCP和UDP两种模式。网络日志(WebLogs)作为数据源经由Flume的管道架构被存储到分布式文件系统(HadoopDistributedFileSystem,HDFS)中,过程如图所示。Flume被设计成一个分布式的管道架构,可以看作在数据源和目标地之间是一个由Agent(代理,最小日志采集单位)构成的网络,其支持数据路由。是专用于收集日志的,它从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道Channel。Flume提供多种数据接收的方式,例如Thrift,twitter1%等。1.Source是一种短暂的存储容器,它将从Source处接收到的event格式的数据缓存起来,直到它们被Sink消费掉,它在Source和Sink间起着桥梁的作用,Channel是一个完整的事务,这一点保证了数据在收发时候的一致性。并且它可以和任意数量的Source和Sink链接。支持的类型有:JDBCchannel,FileSystemchannel,Memorychannel等。2.Channel是用于把数据发送到目的地的组件,它将数据存储到集中存储器中,例如HDFS,它从Channel接收数据并将其传递给目标地。目标地可能是另一个Sink,也可能HDFS,HBase等集中存储器。3.Sink1.1.1数据采集的工具Agent的各个组件如图所示,主要由Source、Channel与Sink三个组件组成。1.1.1数据采集的工具Flume可以将应用产生的数据存储到任何集中存储器中,如HDFS,Hbase。提供上下文路由特征。Flume的管道基于事务,保证了数据在传送和接收时的一致性。Flume的优点当收集数据的速度超过写入数据,即收集信息达到峰值,这种情况下,Flume会在数据生产者和数据收容器间做出调整,保证其能够在两者之间提供平稳的数据传输。Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的。除了日志信息,Flume也可以用来接入收集规模宏大的社交网络或电商网站节点事件数据,如Facebook、亚马逊。1.1.1数据采集的工具Fluentd是一个完全免费且开源的日志收集器,用于统一数据收集和使用,以便更好地使用和理解数据。Fluentd是云端原生计算基金会(CloudNativeComputingFoundation,CNCF)的成员项目之一,所有组件均可在Apache2许可下获得,它同时也提供高可靠性和高扩展性。Fluentd的部署与Flume类似,其构成如图所示,Input/Buffer/Output非常类似于Flume的Source/Channel/Sink。①Input:输入。负责接收数据或者主动抓取数据,支持syslog、http、filetail等。②Engine:引擎。负责处理输入数据,生成输出数据。③Buffer:缓冲区。负责数据获取的性能和可靠性,也有文件或内存等不同类型的Buffer可以配置。④Output:输出。负责输出数据到目的地,例如文件、AWSS3或者其它的Fluentd。1.1.1数据采集的工具①JSON统一记录。如图所示,Fluentd尽可能将数据构造为JSON:这允许Fluentd统一处理日志数据的所有方面:跨多个源和目标(统一日志记录层)收集,过滤,缓冲和输出日志。使用JSON进行下游数据处理要容易得多,因为它具有足够的结构可访问,同时保留了灵活的模式。这使得Fluentd善于解决数据流流向混乱的问题,通过在两者之间提供统一的日志记录层,从后端系统中分离数据源。②可插拔架构。Fluentd具有灵活的插件系统,允许社区扩展其功能。同时它的可插拔架构,支持各种不同种类和格式的数据源和数据输出。通过利用插件可以更好地利用日志。Fluentd的优点③少量系统资源。Fluentd用C语言和Ruby结合编写,并且只需要很少的系统资源。原始实例在30-40MB的内存上运行,并且可以处理13,000个事件/秒/核心。④内置可靠性。Fluentd支持基于内存和文件的缓冲,以防止节点间数据丢失。Fluentd还支持强大的故障转移功能,可以设置为高可用性。1.1.1数据采集的工具
Logstash诞生于2009年8月2日,其作者是世界著名的运维工程师乔丹西塞(JordanSissel),在2013年被Elasticsearch公司收购。Logstash是一个免费且开源的数据收集引擎,具备实时管道处理能力。能够从多个来源采集数据,转换数据,然后将数据发送到所选择的目的地。简单来说,Logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供了很多功能强大的滤网以满足你的各种应用场景。
Logstash通常用做日志采集设备,如在著名的数据栈ELK(Elasticsearch+Logstash+Kibana)中作为日志收集器使用。如图所示,Elasticsearch是搜索和分析引擎;Logstash作为服务器端数据处理管道,它同时从多个源中提取数据并转换,然后将其发送到类似Elasticsearch的“存储”中;Beats是一些轻量级的数据摄入器的组合,用于将数据发送到Elasticsearch或发向Logstash做进一步的处理,并最后导入到Elasticsearch;Kibana允许用户在Elasticsearch中使用图表将数据可视化。Logstash作为数据源与数据存储分析工具之间的桥梁,结合ElasticSearch以及Kibana,能够极大方便数据的处理与分析。1.1.1数据采集的工具
如图所示,Logstash的数据处理过程主要包括:Inputs,Filters,Outputs三部分(其中Inputs和Outputs是必选项,Filters是可选项),另外在Inputs和Outputs中可以使用Codecs(编码解码器)对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output,codec插件,以实现特定的数据采集,数据处理,数据输出等功能。此外,数据往往以各种各样的形式,或分散或集中地存在于很多系统中。如图所示,Logstash支持各种输入选择,可以同时从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从日志、指标、Web应用、数据存储以及各AWS服务中采集数据。1.1.1数据采集的工具
如图所示,Logstash的数据处理过程主要包括:Inputs,Filters,Outputs三部分(其中Inputs和Outputs是必选项,Filters是可选项),另外在Inputs和Outputs中可以使用Codecs(编码解码器)对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output,codec插件,以实现特定的数据采集,数据处理,数据输出等功能。此外,数据往往以各种各样的形式,或分散或集中地存在于很多系统中。如图所示,Logstash支持各种输入选择,可以同时从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从日志、指标、Web应用、数据存储以及各AWS服务中采集数据。1.1.1数据采集的工具
数据从源传输到存储库的过程中,Logstash过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。如图所示,Logstash能够动态地转换和解析数据,不受格式或复杂度的影响。①利用Grok从非结构化数据中派生出结构。②从IP地址破译出地理坐标。③将PII数据匿名化,完全排除敏感字段。④简化整体处理,不受数据源、格式或架构的影响。1.1.1数据采集的工具
Logstash提供众多输出选择,可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。Elasticsearch是我们的首选输出方向,能够为我们的搜索和分析带来无限可能。但它并非唯一选择,如图所示,Logstash提供众多输出选择,可以将数据发送到用户指定的地方,包括syslog(系统日志)和statsd(一种监控数据后端存储开发的前端网络应用)等。1.1.1数据采集的工具①可扩展。Logstash采用可插拔框架,通过200多个插件,Logstash可以接受几乎各种各样的数据。包括日志、网络请求、关系型数据库、传感器或物联网等。②可靠性与安全性。Logstash构建了可信的交付管道:假如Logstash节点发生故障,Logstash会通过持久化队列来保证至少将运行中的事件送达一次。那些未被正常处理的消息会被送往死信队列(deadletterqueue)以便做进一步处理。由于具备了这种吸收吞吐量的能力,无需采用额外的队列层,Logstash就能平稳度过高峰期。Logstash的优点③可监视。Logstash管道通常服务于多种用途,会变得非常复杂,因此充分了解管道性能、可用性和瓶颈非常重要。借助监测和管道查看器功能,可以轻松观察和研究处于活动状态的Logstash节点或整个部署。1.1.1数据采集的工具
1.在数据传输方面,Flume更注重于数据的传输,而在数据预处理方面不如Logstash,而在传输上Flume比Logstash更可靠,因为数据会持久化存储在channel中,只有当数据存储在sink端中才会从channel中删除,这个过程保证了数据的可靠性。
属性FlumeLogstashFluentd内存占用大大小性能高高高语言JavaJRubyC和Ruby框架规模重量级重量级轻量级插件支持多较多多扩展性一般社区活跃度高一般集群分布式单节点单节点
从表中的对比以及前文中所描述的各个工具的特点,可以看出来不同组件之间有着不同的优势和劣势,总结以下特点: 2.在数据预处理方面,Logstash属于ELK组件之一,一般会同ELK其它组件一起配合使用,所以其更注重于数据的预处理。 3.在插件和可扩展性方面Logstash有比Flume丰富的插件可选,所以在扩展功能上比Flume全面,而且对比与Fluentd而言Logstash也更加优秀,相比起来Fluentd插件质量不够好,第三方插件大多是使用者根据自己业务需要编写,只为实现特定需求,没有足够的泛化,也没有足够的测试和性能评估。 4.在性能和内存占用方面,Fluentd虽然有高性能这一项,可能相对于logstash要好很多,但在实际使用中,解析->转换->入库整个过程性能并不理想。此外Fluentd的性能既因为Ruby消耗过多计算和内存资源,又因为Ruby难以受益于多核,所以对数据吞吐量大的业务来说它是很昂贵的。1.1.1数据采集的工具
Splunk作为一个不开源的商业化大数据平台,是一个功能完备的企业级产品。提供完整的数据采集、数据存储、数据分析和处理,数据展示的能力,包括命令行窗口,Web图形界面接口和其他接口,权限控制,分布式管理服务,数据索引,网络端口监听,数据警报,文件监听等功能。使用Splunk处理计算机数据,可以在几分钟内收集、分析和实时获取数据,并从中快速找到系统异常问题和调查安全事件,监视端对端基础结构,避免服务性能降低或中断,以较低成本满足合规性要求,关联并分析跨越多个系统的复杂事件,从而获取新层次的运营可见性以及IT和业务智能。Splunk主要包括以下三个角色。
①SearchHead。SearchHead为搜索头,其负责数据的搜索和处理,提供搜索时的信息抽取。SearchHead的作用就是根据用户的查询请求查询各个Indexers中的数据,融合Indexers所返回的结果,统一显示给用户,它只负责查询,不负责建立索引。
②Indexer。Indexer为索引器,其负责数据的存储和索引。Indexer不仅负责为数据建立索引,还负责响应查找索引数据的用户请求,还有读取数据和负责查找管理工作。虽然Indexer可以查找它本身的数据,但是在多Indexer的集群中,可以通过SearchHead的组件来整合多个Indexer,对外提供统一的查询管理和服务。
③Forwarder。Forwarder为转发器,其负责数据的收集、清洗、变形,并发送给Indexer。SplunkForwarder作为Splunk提供的组件,它的作用是把不同机器上面的数据,如log(日志文件),转发给indexer。Forwarder可以运行在不同的操作系统上面。1.1.1数据采集的工具
Splunk提供了三种Forwarder,分别是UniversalForwarder、HeavyForwarder和LightForwarder。UniversalForwarder相对于其他两种最重要的优点是:它能够极大地减少对主机硬件资源的占用。但是,它也做出了一定的牺牲,如不支持查询和建立数据索引。
Splunk内置了对Syslog,TCP/UDP,Spooling的支持,同时,用户可以通过开发Input和ModularInput的方式来获取特定的数据。在Splunk提供的软件仓库里有很多成熟的数据采集应用,如AWS,DBConnect等,可以方便的从云或者是数据库中获取数据进入Splunk的数据平台做分析。
值得注意的是,SearchHead和Indexer都支持Cluster,即高可用,高扩展。但是Splunk现在还没有针对Forwarder的Cluster的功能。也就是说如果有一台Forwarder的机器出了故障,数据收集也会随之中断,并不能把正在运行的数据采集任务Failover(故障转移)到其它的Forwarder上。1.1.2爬虫的原理与分类
网络爬虫是按照一定的规则,自动地抓取万维网信息的程序或脚本。网络爬虫按照系统结构和实现技术,可以分为以下四种类型:通用网络爬虫(GeneralPurposeWebCrawler)、
聚焦网络爬虫(FocusedWebCrawler)、
增量式网络爬虫(IncrementalWebCrawler)、
深层网络爬虫(DeepWebCrawler)。
实际的网络爬虫系统通常是几种爬虫技术相结合实现的。通用网络爬虫
通用网络爬虫的爬取对象从一些种子URL延展至整个Web,主要为门户站点搜索引擎和大型Web服务提供商采集数据的服务,有较高的应用价值。这类网络爬虫爬取的范围和数量巨大,对于爬取速度和存储空间要求较高,对于爬取页面的顺序要求相对较低,同时由于待刷新的页面过多,通常采用并行工作方式,但需要较长时间才能刷新一次页面。通用网络爬虫的结构大致可以分为页面爬行模块、页面分析模块、链接过滤模块、页面数据库、URL队列、初始URL集合几个部分。如图所示,通用网络爬虫的实现原理及过程简要概括如下。1.1.2爬虫的原理与分类爬取过程04030201从URL队列中读取新的URL,并依据新的URL爬取网页,同时从新网页中获取新URL,并重复上述的爬取过程。将新的URL放到URL队列中。获取了下一个新的URL地址之后,会将新的URL地址放到URL队列中。
根据初始的URL爬取页面并获得新的URL。获得初始的URL地址之后,首先需要爬取对应URL地址中的网页,爬取了对应的URL地址中的网页后,将网页存储到原始数据库中,并且在爬取网页的同时,发现新的URL地址,同时将已爬取的URL地址存放到一个URL列表中,用于去重和判断爬取的进程。获取初始的URL。初始的URL地址可以由用户人为地指定,也可以由用户指定的某个或某几个初始爬取网页决定。1.1.2爬虫的原理与分类05满足爬虫系统设置的停止条件时,停止爬取。在编写爬虫的时候,一般会设置相应的停止条件。如果没有设置停止条件,爬虫则会一直爬取下去,一直到无法获取新的URL地址为止,若设置了停止条件,爬虫则会在停止条件满足时停止爬取。为提高工作效率,通用网络爬虫会采取一定的爬行策略。常用的爬行策略有:深度优先策略、广度优先策略。A深度优先策略:基本方法是按照深度由低到高的顺序,依次访问下一级网页链接,直到不能再深入为止。爬虫在完成一个爬行分支后返回到上一链接节点进一步搜索其它链接。当所有链接遍历完后,爬行任务结束。这种策略比较适合垂直搜索或站内搜索,但当爬行页面内容层次较深的站点时会造成资源的巨大浪费。B广度优先策略:此策略按照网页内容目录层次深浅来爬行页面,处于较浅目录层次的页面首先被爬行。当同一层次中的页面爬行完毕后,爬虫再深入下一层继续爬行。这种策略能够有效控制页面的爬行深度,避免遇到一个无穷深层分支时无法结束爬行的问题,无需存储大量中间节点,不足之处在于需较长时间才能爬行到目录层次较深的页面。1.1.2爬虫的原理与分类聚焦网络爬虫
聚焦网络爬虫是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫。相较于通用网络爬虫而言,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求。由于聚焦网络爬虫需要有目的地进行爬取,所以相较于通用网络爬虫而言,需要增加目标的定义和过滤机制,具体来说,此时,其执行原理和过程需要比通用网络爬虫多出三步,即目标的定义、无关链接的过滤、下一步要爬取的URL地址的选取。如图所示,聚焦网络爬虫的实现原理及过程简要概括如下。1.1.2爬虫的原理与分类①对爬取目标的定义和描述。在聚焦网络爬虫中,首先要依据爬取需求定义好该聚焦网络爬虫爬取的目标,以及进行相关的描述。②获取初始的URL。③根据初始的URL爬取页面,并获得新的URL。④从新的URL中过滤掉与爬取目标无关的链接。因为聚焦网络爬虫对网页的爬取是有目的性的,所以与目标无关的网页将会被过滤掉。同时需要将已爬取的URL地址存放到一个URL列表中,用于去重和判断爬取的进程。⑤将过滤后的链接放到URL队列中。⑥从URL队列中,根据搜索算法确定URL的优先级,并确定下一步要爬取的URL地址。在聚焦网络爬虫中,下一步爬取哪些URL地址相对来说是很重要的。对于聚焦网络爬虫来说,不同的爬取顺序,可能导致爬虫的执行效率不同,所以,需要依据搜索策略来确定下一步需要爬取哪些URL地址。⑦从下一步要爬取的URL地址中,读取新的URL,然后依据新的URL地址爬取网页,并重复上述爬取过程。⑧满足系统中设置的停止条件时,或无法获取新的URL地址时,停止爬行。1.1.2爬虫的原理与分类增量式网络爬虫
增量式网络爬虫是指对已下载网页采取增量式更新和只爬取新产生或发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是新的页面。相较于周期性爬行和刷新页面的网络爬虫而言,增量式爬虫只会在需要的时候爬行新产生或发生更新的页面,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。增量式网络爬虫的体系结构包含爬行模块、排序模块、更新模块、本地页面集、待爬行URL集以及本地页面URL集。
增量式爬虫有两个目标:保持本地页面集中存储的页面为最新页面和提高本地集中存储页面的质量。为实现第一个目标,增量式爬虫需要通过重新访问网页来更新本地页面集中页面内容,常用的方法有:①统一更新法:爬虫以相同的频率访问所有网页,不考虑网页的改变频率;②个体更新法:爬虫根据个体网页的改变频率来重新访问各页面;③基于分类的更新法:爬虫根据网页改变频率将其分为更新较快网页子集和更新较慢网页子集两类,然后以不同的频率访问这两类网页。为实现第二个目标,增量式爬虫需要对网页的重要性排序,常用的策略有:广度优先策略、PageRank优先策略等。
增量式网络爬虫和各种爬虫的大致流程基本相似,只不过多出了去重的判断,这也是增量式网络爬虫的特点。其多出来的三个步骤为:
①在获取URL时,发送请求之前先判断这个URL是不是之前爬取过。
②在解析URL内容后判断这部分内容是不是之前爬取过。
③在将采集到的信息写入存储介质时判断内容是不是已经在介质中存在。1.1.2爬虫的原理与分类DeepWeb爬虫
Web页面按存在方式可以分为表层网页(SurfaceWeb)和深层网页(DeepWeb)。表层网页是指传统搜索引擎可以索引的页面,即以超链接可以到达的静态网页为主构成的Web页面。DeepWeb是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的Web页面。例如那些用户注册后内容才可见的网页就属于DeepWeb。并且DeepWeb中可访问信息容量是SurfaceWeb的几百倍,是互联网上最大、发展最快的新型信息资源。
DeepWeb爬虫体系结构包含六个基本功能模块(爬行控制器、解析器、表单分析器、表单处理器、响应分析器、LVS控制器)和两个爬虫内部数据结构(URL列表、LVS表)。其中LVS(LabelValueSet)表示标签或数值集合,用来表示填充表单的数据源。
DeepWeb爬虫爬行过程中最重要部分就是表单填写,包含两种类型:①基于领域知识的表单填写:此方法一般会维持一个本体库,通过语义分析来选取合适的关键词填写表单。②基于网页结构分析的表单填写:此方法一般无领域知识或仅有有限的领域知识,将网页表单表示成DOM树,从中提取表单各字段值。1.1.2爬虫的原理与分类如图所示网络爬虫的核心流程可概括为:发起请求、获取相应内容、解析内容、保存数据四个主要步骤。前两个步骤为发起请求(Request)和获取服务器的响应(Response),也是爬虫最核心部分。1.1.3网络爬虫核心教程Request由客户端向服务端发出,如图所示,可以分为4部分内容:请求方式(RequestMethod)、请求网址(RequestURL)、请求头(RequestHeaders)、请求体(RequestBody)。1.1.3网络爬虫核心教程1.1.3网络爬虫核心教程(1)请求方式
常见的请求方式有两种:GET和POST。在浏览器中直接输入URL并回车,这便发起了一个GET请求,请求的参数会直接包含到URL里。例如在百度中搜索相应内容,就是一个GET请求,其中URL中包含了对请求的参数信息。POST请求大多在表单提交时发起。例如对于一个登录表单,输入用户名和密码后,点击“登录”按钮,这通常会发起一个POST请求,其数据通常以表单的形式传输,而不会体现在URL中。 GET请求中的参数包含在URL里面,数据可以在URL中看到,而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,包含在请求体中;GET请求提交的数据最多只有1024字节,而POST方式没有限制;一般来说,需要提交用户名和密码等敏感信息,使用GET方法请求会暴露在URL中,所以此时最好以POST方式发送,上传文件时,由于文件内容比较大,也会选用POST方式。我们平常使用的请求大部分是GET和POST请求,如表所示,还有一些请求方式如HEAD、PUT、DELETE等。方法描述GET请求页面,并返回页面内容HEAD类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头POST大多数用于提交表单或上传文件,数据包含在请求体中PUT从客户端向服务器传送的数据取代指定文档中的内容DELETE请求服务器删除指定的页面CONNECT把服务器当做跳板,让服务器代替客户端访问其他网页OPTIONS允许客户端查看服务器的性能TRACE回显服务器收到的请求,主要用于测试或诊断1.1.3网络爬虫核心教程(2)请求网址URLURL(uniformresourcelocator)即统一资源定位符,用于唯一确定想请求的资源。如一个网页文档、一张图片、一个视频等都可以用URL来确定。(3)请求头请求头以键值对的形式将请求的一些配置信息告诉服务器,让服务器判断这些配置信息并解析请求头,用来说明服务器要使用的附加信息,比较重要的信息有Cookie,Referer,User-Agent等。下面简要说明一些常用的头信息。①Accept:请求报头域,用于指定客户端可接受哪些类型的信息。②Accept-Language:指定客户端可接受的语言类型。③Accept-Encoding:指定客户端可接受的内容编码。④Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。从HTTP1.1版本开始,请求必须包含此内容。⑤Cookie:也常用复数形式Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。如我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是Cookies的功劳。Cookies里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头加上Cookies并将其返回给服务器,服务器通过Cookies识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登陆之后才能看到的网页内容。⑥Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应处理,如做来源统计、防盗链处理等。⑦User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。再做爬虫时加上此信息,可以伪装为浏览器,如果不加则很容易可能被识别出为爬虫。⑧Content-Type:也称为互联网媒体类型(InternetMediaType)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。如text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型。(4)请求体请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。Response由服务端返回给客户端,如图所示,可以分为三部分:响应状态(ResponseStatus)、响应头(ResponseHeaders)、响应体(ResponseBody)。1.1.3网络爬虫核心教程1.1.3网络爬虫核心教程(1)响应状态响应状态表示服务器对响应的反馈,主要由状态码来标识,如200代表服务器正常响应,404代表页面未找到,500代表服务器内部发生错误。网络爬虫中,我们可以根据状态码的数字来判断服务器响应状态,如状态码为200,则证明成功返回数据,再进行进一步的处理。(2)响应头响应头包含了服务器对请求的应答信息,下面简要说明一些常用的头信息:①Date:标识响应产生的时间。②Last-Modified:指定资源的最后修改时间。③Content-Encoding:指定响应内容的编码。④Server:包含服务器的信息,如名称、版本号等。⑤Content-Type:文档类型,指定返回的数据类型是什么,如text/html代表返回HTML文档,application/x-javascript代表返回JavaScript文件,image/jpeg代表返回图片。⑥Set-Cookie:设置Cookies。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求。⑦Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。1.1.3网络爬虫核心教程(3)响应体Response中最重要的当属响应体的内容。响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的HTML代码;请求一张图片时,它的响应体就是图片的二进制数据。在做爬虫时,我们主要通过响应体得到的网页的源代码、JSON格式数据等,然后从中做相应内容的提取。在掌握爬虫的原理之后,我们需要明晰爬虫的作用,便于我们更好地使用爬虫。互联网的核心价值在于数据的共享与传递,如果我们把互联网比作一张巨大的蜘蛛网,那计算机上的数据便是蜘蛛网上的一个猎物,而爬虫就是一只蜘蛛,沿着蜘蛛网抓取自己想要的“猎物”——数据。数据作为互联网中最具价值的产物,爬虫在数据分析过程中扮演重要角色,如企业需要数据来分析用户行为,分析自己产品的不足之处,来分析竞争对手等等;同时在搜索引擎、采集数据、广告过滤等方面爬虫也有广泛应用。爬虫应用场景04030201资讯推荐系统通过爬虫技术抓取数新闻源,然后以用户行为属性标签归纳和深度自然语言搜索优化手段来分发给用户,做到千人千面的阅读体验,达到最可观的搜索优化程度。资讯推荐系统通过爬虫技术抓取数新闻源,然后以用户行为属性标签归纳和深度自然语言搜索优化手段来分发给用户,做到千人千面的阅读体验,达到最可观的搜索优化程度。舆情分析系统顾名思义就是舆论发展的情况有正面和负面之分,利用爬虫技术来监测搜索引擎、新闻门户、论坛、博客、微博、微信、报刊、视频的舆情。根据预定的监控关键词,实现全媒体一键搜索,保证信息搜集的全面性;同时为了丰富数据的多样性,除了采集文本信息之外,还对图像、视频等信息进行采集;为保证其时效性,采用全栈式的响应机制,对于目标网站发布目标信息后,可以在分钟级内采集到本地数据库内。1.1.4爬虫的应用场景购物网站比价系统如今各大电商平台为了活跃用户进行各种秒杀活动并推出各种优惠券等,同样的一件商品在不同网购平台价格可能不同,这就催生各种比价网站。那么这些网站是如何在秒级的时间内知道一件商品在某站有优惠?这就需要一个爬虫系统来实时监控各站的价格浮动。先采集商品的价格,规格,数量等,再做处理,分析,反馈。数据预处理简介221.2数据预处理简介现实世界中数据大体上都是不完整,不一致的脏数据,无法直接进行数据挖掘,或挖掘结果差强人意。为了提高数据挖掘的质量产生了数据预处理技术。数据预处理(DataPreprocessing)是指在主要的数据分析之前对数据进行的一些处理操作。本节对数据预处理的相关流程及工具等进行介绍。数据挖掘过程一般包括数据采集,数据预处理,数据挖掘以及数据评价和呈现。目前,数据挖掘的研究工作大都集中在挖掘算法、挖掘技术、挖掘语言的探讨而忽视对数据预处理的研究。事实上,在一个完整的数据挖掘过程中,数据预处理要花费60%左右的时间。数据预处理作为数据分析流程中工作量最大的一环,也是必不可少的。要使挖掘算法挖掘出有效的知识,必须为其提供干净,准确,简洁的数据,一些成熟的挖掘算法对其处理的数据集合都有一定的要求:比如数据的完整性好,冗余性小,属性的相关性小等,杂乱、重复、不完整的数据会严重影响到数据挖掘算法的执行效率,甚至会导致挖掘结果的偏差。在实际业务处理中,数据通常是“脏数据”。所谓的“脏”,指数据可能存在以下几种问题:①数据缺失/数据不完整(Incomplete)是属性值为空的情况。②数据噪声(Noisy)是数据值不合常理的情况。③数据不一致(Inconsistent)是数据前后存在矛盾的情况。④数据冗余(Redundant)是数据量或者属性数目超出数据分析需要的情况。⑤数据集不均衡(DatasetImbalance)是各个类别的数据量相差悬殊的情况。⑥离群点/异常值(Outliers)是远离数据集中其余部分的数据。⑦数据重复(Duplicate)是在数据集中出现多次的数据。而人为、硬件、软件方面出现的问题往往都会造成数据存在这些偏差,如数据收集的时候缺乏合适的值,数据收集时和数据分析时的不同考虑因素,数据收集工具的问题,数据输入时的人为计算错误,数据传输中产生的错误。因此想要避免数据出现“脏数据”是十分困难的,不正确、不完整和不一致的数据是现实世界的大型数据库和数据仓库的共同特点,这也从侧面表明数据预处理的重要性。没有高质量的数据,就没有高质量的挖掘结果,高质量的决策必须依赖高质量的数据。1.2.1数据预处理的目的和意义
数据的预处理是指对所收集数据进行分类或分组前所做的审核、筛选、排序等必要的处理。数据预处理的方法主要包括:数据清洗,数据集成,数据变换,数据规约。这些数据处理技术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低实际挖掘所需要的时间。1.数据清洗数据清洗需要去除源数据集中的噪声数据和无关数据,处理遗漏数据,本处介绍噪声数据的处理、空缺值的处理和清洗脏数据。(1)噪声数据的处理:噪声是一个测量变量中的随机错误和偏差,包括错误的值或偏离期望的孤立点值,对于噪声数据有如下几种处理方法:分箱,回归,聚类。①分箱:分箱方法通过考察数据的“近邻”(即周围的值)来光滑有序数据的值,有序值分布到一些“桶”或箱中。由于分箱方法考察近邻的值,因此进行局部光滑。几种分箱技术:用箱均值光滑、用箱边界光滑、用箱中位数光滑。②回归:可以用一个函数(如回归函数)拟合数据来光滑数据。线性回归涉及找出拟合两个属性(或变量)的“最佳”线,使得一个属性可以用来预测另一个。多元线性回归是线性回归的扩展,其中涉及的属性多于两个,并且数据拟合到一个多维曲面。③聚类:通过聚类检测离群点。(2)空缺值的处理:目前最常用的方法是使用最可能的值填充空缺值,如用一个全局常量替换空缺值,使用属性的平均值填充空缺值或将所有元组按照某些属性分类,然后用同一类中属性的平均值填充空缺值。例如一个公司职员平均工资收入为3000元,则使用该值替换工资中“基本工资”属性中的空缺值。(3)清洗脏数据:异构数据源数据库中的数据并不都是正确的,常常不可避免的存在着不完整,不一致,不精确和重复的数据,往往使挖掘过程陷入混乱,导致不可靠的输出。清洗脏数据可采用:专门的程序、采用概率统计学远离查找数值异常的记录、手工对重复记录的进行检测和删除。1.2.2数据预处理的流程2.数据集成数据集成是指合并多个数据源中的数据,存放在一个一致的数据存储(如数据仓库)中。数据集成有三个主要问题:①实体识别问题:在数据集成时候,来自多个数据源的现实世界的实体有时并不一定是匹配的,例如:数据分析者如何才能确信一个数据库中的student_id和另一个数据库中的stu_id值是同一个实体,通常,可以根据数据库或者数据仓库的元数据来区分模式集成中的错误。②冗余问题:数据集成往往导致数据冗余,如同一属性多次出现,同一属性命名不一致等,对于属性间的冗余可以用相关分析检测到,然后删除。有些冗余可以被相关分析检测到,例如通过计算属性A、B的相关系数(皮尔逊积矩系数)来判断是否冗余;对于离散数据,可通过卡方检验来判断两个属性A和B之间的相关联系。③数据值冲突问题:对于现实世界的同一实体,来自不同数据源的属性值可能不同,这可能是因为表示、比例、或编码、数据类型、单位不统一、字段长度不同。1.2.2数据预处理的流程3.数据变换数据变换主要是找到数据的特征表示,用维变换或转换方法减少有效变量的数目或找到数据的不变式,包括规范化,泛化,光滑等操作,将数据转换或统一成适合于挖掘的形式,具体如下:(1)光滑:去掉数据的噪声,包括分箱,回归和聚类。(2)聚集:对数据进行汇总或聚集。这一步通常用来为多粒度数据分析构造数据立方体。(3)数据泛化:使用概念分层,用高层概念替换底层或“原始”数据。(4)规范化:又称为归一化,特征缩放(featurescaling)。将属性数据按比例缩放,使之落入一个小的特定区间。
规范化方法:①最小-最大规范化:v’=[(v-min)/(max-min)]*(new_max-new_min)+new_min。
②z-score规范化(或零均值规范化):v’=(v-属性A的均值E)/属性A的标准差。
③小数定标规范化:v’=v/10的j次方,j是使Max(|v’|)<1的最小整数。(5)属性构造(或特征构造):可以构造新的属性并添加到属性集中,以帮助挖掘过程。1.2.2数据预处理的流程4.数据规约指将数据按语义层次结构合并,语义层次结构定义了元组属性值之间的语义关系,规约化和规约能大量减少元组个数,提高计算效率,同时,规格化和规约过程提高了知识发现的起点,使得一个算法能够发现多层次的知识,适应不同应用的需要。数据规约是将数据库中的海量数据进行规约,规约之后的数据仍接近于保持原数据的完整性,但数据量相对小的多,这样进行挖掘的性能和效率会得到很大的提高。数据规约的策略主要有数据立方体聚集,维规约,数据压缩,数值压缩,离散化和概念分层。(1)维规约:通过删除不相关的属性减少数据量,不仅仅压缩了数据集,还减少了出现在发现模式上的属性数目,通常采用属性子集选择方法找出最小属性集,使得数据类的概率分布尽可能的接近使用所有属性的原分布(2)数据压缩,数据压缩分为无损压缩和有损压缩,比较流行和有效的有损数据压缩方法是小波变换和主要成分分析,小波变换对于稀疏或倾斜数据以及具有有序属性的数据有很好的压缩效果。(3)数值规约:数值归约通过选择替代的、较小的数据表示形式来减少数据量。数值归约技术可以是有参的,也可以是无参的。有参方法是使用一个模型来评估数据,只需存放参数,而不需要存放实际数据。有参的数值归约技术有以下两种,回归:线性回归和多元回归;对数线性模型:近似离散属性集中的多维概率分布。无参的数值归约技术有3种:直方图,聚类,选样。(4)概念分层通过收集并用较高层的概念替换较低层的概念来定义数值属性的一个离散化。概念分层可以用来归约数据,通过这种概化尽管细节丢失了,但概化后的数据更有意义、更容易理解,并且所需的空间比原数据少。对于数值属性,由于数据的可能取值范围的多样性和数据值的更新频繁,说明概念分层是困难的。数值属性的概念分层可以根据数据的分布分析自动地构造,如用分箱、直方图分析、聚类分析、基于熵的离散化和自然划分分段等技术生成数值概念分层。由用户专家在模式级显示地说明属性的部分序或全序,从而获得概念的分层;只说明属性集,但不说明它们的偏序,由系统根据每个属性不同值的个数产生属性序,自动构造有意义的概念分层。1.2.2数据预处理的流程1.2.3数据预处理的工具介绍Kettle作为免费开源的基于Java的企业级ETL(Extract-Transform-Load,数据抽取、转换、装载的过程)工具,支持图形化的GUI设计界面,可以以工作流的形式流转,做一些简单或复杂的数据抽取、数据清洗、数据转换、数据过滤等数据预处理方面工作,功能强大简单易用。如图所示,Kettle包括四大核心组件:①Spoon。转换(transform)设计工具(GUI方式)。②Chef。工作(job)设计工具(GUI方式)。③pan。转换(transform)执行器(命令行方式)。④Kitchen。工作(job)执行器(命令行方式)。1.2.3数据预处理的工具介绍job和transform是Kettle中的两种脚本文件,transformation完成针对数据的基础转换,job则完成整个工作流的控制。如图所示,为Kettle的概念模型。Kettle的执行分为两个层次:Job和Transformation。这两个层次的最主要的在于数据的传递和运行方式。1.2.3数据预处理的工具介绍job和transform是Kettle中的两种脚本文件,transformation完成针对数据的基础转换,job则完成整个工作流的控制。如图所示,为Kettle的概念模型。Kettle的执行分为两个层次:Job和Transformation。这两个层次的最主要的在于数据的传递和运行方式。(1)Transformation:定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比Job粒度更小一级的容器,我们将任务分解成Job,然后需要将Job分解成一个或多个Transformation,每个Transformation只完成一部分工作。(2)Step:是Transformation内部的最小单元,每一个Step完成一个特定的功能。(3)Job:负责将Transformation组织在一起进而完成某一工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的Job,当这几个Job都完成了,也就说明这项任务完成了。(4)JobEntry:JobEntry是Job内部的执行单元,每一个JobEntry用于实现特定的功能,如:验证表是否存在,发送邮件等。可以通过Job来执行另一个Job或者Transformation,也就是说Transformation和Job都可以作为JobEntry。(5)Hop:用于在Transformation中连接Step,或者在Job中连接JobEntry,是一个数据流的图形化表示。在Kettle中Job中的JobEntry是串行执行的,故Job中必须有一个Start的JobEntry;Transformation中的Step是并行执行的。1.2.3数据预处理的工具介绍Python数据采集与预处理常用库331.3Python数据采集与预处理常用库Python作为一门高层次的结合了解释性、编译性、互动性和面向对象的编程语言,最大的优势之一就是其具有脚本语言中最丰富和强大的类库,从简单的字符串处理,到复杂的3D图形绘制,这些类库覆盖了绝大部分应用场景,使得Python具有良好的可扩展性。本节就将介绍Python在数据采集和预处理方面的库。1.3.1请求库用于实现HTTP请求操作1①urllib:一系列用于操作URL的功能。2②requests:基于urllib编写的,阻塞式HTTP请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。3③selenium:自动化测试工具。一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,如输入验证码。4④aiohttp:基于asyncio实现的HTTP框架。异步操作借助于async/await关键字,使用异步库进行数据抓取,可以大大提高效率。1.3.2解析库用于从网页中提取信息1①beautifulsoup:html和XML的解析,从网页中提取信息,同时拥有强大的API和多样解析方式。2②pyquery:jQuery的Python实现,能够以jQuery的语法来操作解析HTML文档,易用性和解析速度都很好。3③lxml:支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。4④tesserocr:一个OCR库,在遇到验证码(图形验证码为主)的时候,可直接用OCR进行识别。1.3.3数据存储库和本地数据库进行存储交互1①pymysql:一个纯Python实现的MySQL客户端操作库。2②pymongo:一个用于直接连接MongoDB数据库进行查询操作的库。3③redisdump:一个用于redis数据导入/导出的工具。基于Ruby实现。1.3.4处理库这些库在Python中根据数据分析的需求,用来对数据进行一系列处理操作,如数组运算,以DataFrame形式来批量处理数据,或是将现有数据进行绘图操作。①Numpy:NumPy(NumericalPython)是Python的一个扩展程序库,支持大量的数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy作为一个运行速度非常快的数学库,包含:一个强大的N维数组对象ndarray;广播功能函数;整合C/C++/Fortran代码的工具;线性代数、傅里叶变换、随机数生成等功能。②Matplotlib:Matplotlib是Python的绘图库。它可与NumPy一起使用,也可以和图形工具包一起使用,提供了一种有效的MatLab开源替代方案。Matplotlib是一个Python的2D绘图库,以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,可以在Python脚本、Python和IPythonshell、网络应用服务器和各种图形用户界面工具包中使用。③Pandas:Pandas是建立在Numpy之上用于数据操纵和分析的模块,Pandas允许为行和列设定标签;可以针对时间序列数据计算滚动统计学指标;能处理NaN值;能够将不同的数据集合并在一起。Pandas为Python带来了两种新的数据结构:PandasSeries和PandasDataFrame,借助这两种数据结构,我们能够轻松直观地处理带标签数据和关系数据。Pandasseries是像数组一样的一维对象,同Numpyarray之间的主要区别之一是可以为Pandasseries中的每个元素分配索引标签;另一个区别是Pandasseries可以同时存储不同类型的数据。PandasDataFrame是具有带标签的行和列的二维数据结构,类似于电子表格。④SciPy:SciPy是基于NumPy开发的高级模块,实现了许多算法和函数,用于解决科学计算中的一些标准问题。例如数值积分和微分方程求解,扩展的矩阵计算,最优化,概率分布和统计函数,甚至包括信号处理等。1.3.4处理库对于较小规模的爬虫,Python自带的类库便可满足需求。但当代码量增大、异步处理等问题出现时常使用Python提供的一些爬虫框架,不仅便于管理及拓展,同时只需编写少量代码并调用所提供的接口即可实现需求。以下为Python常用爬虫框架:(1)ScrapyScrapy是一个爬取网站数据,提取结构性数据的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。它集成了包括高性能异步下载、持久化等功能,提供了一系列在spider之间共享的可复用的过滤器(即ItemLoaders),对智能处理爬取数据提供了内置支持,具有很强的项目通用性。(2)PyspiderPyspider是一个用Python实现的功能强大的网络爬虫框架,带有强大的WebUI,支持脚本编辑器,任务监视器,项目管理器以及结果查看器。能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能设置定时爬取任务与任务优先级等。(3)CrawleyCrawley可以高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等。(4)PortiaPortia是一个开源可视化爬虫工具,基于Scrapy内核,支持动态匹配相同模板的内容。在不需要任何专业开发知识的情况下高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等形式。(5)GrabGrab是一个用于构建Web刮板的Python框架。借助Grab,您可以构建各种复杂的网页抓取工具,从简单的5行脚本到处理数百万个网页的复杂异步网站抓取工具。Grab提供一个API用于执行网络请求和处理接收到的内容,例如与HTML文档的DOM树进行交互。第三章BUSINESSPLANFORWORK谢谢观看“Python数据采集与预处理第二章数据采集与存储“Python数据采集与预处理目录CONTENTS数据类型与操作2.1网页抓取:爬虫基础2.2解析库的使用2.3数据存储2.4学习目标掌握JSON、CSV基础数据的定义格式了解爬虫的基本流程了解什么是HTTP掌握网页的基本元素掌握并熟练使用urllib库掌握并熟练使用requests库掌握并熟练使用正则表达式提取数据了解什么是代理网络掌握并熟练使用解析库BeautifulSoup、XPath解析网页掌握并熟练使用JSON、CSV格式的读取、存储及数据在MySQL数据库的操作数据类型与操作01经常使用AJAX配合JSON来完成任务,比和XML配合容易的多,速度快。如果使用XML,需要读取XML文档,然后用XMLDOM来遍历文档并读取值并存储在变量中。但如果使用JSON,则只需读取JSON字符串。CSV是一种纯文本文件格式,用于存储表格数据(例如电子表格或数据库)。它本质上存储的表格数据包括数字和纯文本。大多数在线服务使用户可以自由地将网站中的数据导出为CSV文件格式。CSV文件通常会在Excel中打开,同时在参加编程马拉松或Kaggle比赛时,通常会提供这种文件格式的语料。从这使用范围方面来看,CSV更加深得程序员的喜爱。2.1数据类型与操作2.1.1数据类型介绍JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集,也就是JavaScript对象标记(1)对象:对象在JavaScript中是使用花括号{}包裹起来的内容,数据结构为{key1:value1,key2:value2,...}的键值对结构。在面向对象的语言中,key为对象属性,value为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。(2)数组:数组在JavaScript中是方括号[]包裹起来的内容,数据结构为[“java”,“javascript”,“vb”,...]的索引结构。在JavaScript中,数组是一种比较特殊的类型,它也可以像对象那样使用键值对,但还是索引用的多。同样的,值的类型可以是任意类型。2.1数据类型与操作2.1.2JSON格式数据2.1数据类型与操作{"programmers":[{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}],"authors":[{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}],"musicians":[{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}]}在不同的主条目(programmers、authors和musicians)之间,记录中实际的名称/值对可以不一样。JSON是完全动态的,允许在JSON结构的中间改变表示数据的方式。逗号分隔值(Comma-SeparatedValues,CSV),有时也称为字符分隔值,因为分隔字符也可以不是逗号,其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔。每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。CSV的格式规范(格式规范定义来源于RFC4180),一共七点:2.1数据类型与操作2.1.3CSV格式数据(1)每一行记录位于一个单独的行上,用回车换行符CRLF(也就是\r\n)分割。(2)文件中的最后一行记录可以有结尾回车换行符,也可以没有。(3)第一行可以存在一个可选的标题头,格式和普通记录行的格式一样。标题头要包含文件记录字段对应的名称,应该有和记录字段一样的数量。(在MIME类型中,标题头行的存在与否可以通过MIMEtype中的可选“header”参数指明)。(4)在标题头行和普通行每行记录中,会存在一个或多个由半角逗号(,)分隔的字段。整个文件中每行应包含相同数量的字段,空格也是字段的一部分,不应被忽略。每一行记录最后一个字段后不能跟逗号(通常用逗号分隔,也有其他字符分隔的CSV,需事先约定)。(5)每个字段可用也可不用半角双引号(’’)括起来(不过有些程序,如Microsoft的Excel就根本不用双引号)。如果字段没有用引号括起来,那么该字段内部不能出现双引号字符。(6)字段中若包含回车换行符、双引号或者逗号,该字段需要用双引号括起来。(7)如果用双引号括字段,那么出现在字段内的双引号前必须加一个双引号进行转义。2.1数据类型与操作网页抓取:爬虫基础02网络爬虫(又称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(GeneralPurposeWebCrawler)、聚焦网络爬虫(FocusedWebCrawler)、增量式网络爬虫(IncrementalWebCrawler)、深层网络爬虫(DeepWebCrawler)。
实际的网络爬虫系统通常是几种爬虫技术相结合实现的。2.2网页抓取:爬虫基础2.2.1爬虫基本流程介绍0105040203通用网络爬虫获取初始URL。初始的URL地址可以由人为地指定,也可以由用户指定的某个或几个初始爬虫网页决定。根据初始的URL爬取页面并获得新的URL。获得初始的URL地址之后,首先需要爬取对应URL地址中的网页,爬取了对应的URL地址中的网页后,将网页存储到原始数据库中,并且在爬取网页的同时,发现新的URL地址,同时将已经爬取的URL地址存放到一个URL列表中保存,用于去重以及判断爬取的进程。将新的URL放到URL队列中。在第2步中,获取到了下一个新的需要爬取的URL地址后,会将新的URL地址放到URL队列中。从URL队列中读取新的URL,并依据新的URL爬取网页,同时从新网页中获取URL,并存放上述爬取过程。满足爬虫系统设置的停止条件时,停止爬取。在编写爬虫的时候,一般会设置相应的停止条件。2.2网页抓取:爬虫基础聚焦网络爬虫04030201从新的URL中过滤掉与爬取目标无关的链接。因为聚焦网络爬虫对网页的爬取是有目的性的,所以与目标无关的网页将会被过滤掉。同时,也需要将已爬取的URL地址存放到一个URL列表中,用于去重和判断爬取的进程。根据初始的URL爬取页面,并获取新的URL。获取初始URL。爬取目标的定义和描述。在聚焦网络爬虫中,我们首先要依据爬取需求定义好该聚焦网络爬虫爬取的目标,以及进行相关的描述。2.2网页抓取:爬虫基础聚焦网络爬虫08070605满足系统中设置的停止条件时,或无法获取新的URL地址时,则停止爬虫行为。从下一步要爬取的URL地址中,读取新的URL,然后依据新的URL地址爬取网页,并重复上述爬取过程。从URL队列中,根据搜索算法,确定URL的优先级,并确定下一步要爬取的URL地址。在通用网络爬虫中,下一步爬取哪些URL地址,是不太重要的,但是在聚焦网络爬虫中,不同的爬取顺序,可能导致爬虫的执行效率不同,所以,我们需要依据搜索策略来确定下一步需要爬取哪些URL地址。将过滤后的链接放到URL队列中。2.2网页抓取:爬虫基础
超文本传输协议(HyperTextTransferProtocol,HTTP),
是互联网上应用最为广泛的一种网络协议。所有WWW文件都必须遵守这个标准。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。2.2网页抓取:爬虫基础2.2.2HTTP基本原理2.2网页抓取:爬虫基础HTTP协议采用URL作为定位网络资源的标识,URL格式如下:http://host[:port][path]host:合法的Internet主机域名或IP地址port:端口号,缺省端口为80path:请求资源的路径HTTPS(HyperTextTransferProtocoloverSecureSocketLayer):超文本传输安全协议。通俗讲HTTPS就是HTTP的安全版,通过它传输的内容都是经过SSL加密的。爬虫抓取的页面通常都是HTTP或HTTPS协议的。当我们打开浏览器,从一个站点点击链接进入下一个站点,就相当于从超文本的一个空间进入另一个空间,浏览器再将其解析出来,就是我们看到的页面了。HTTP是一个应用层协议,是我们想从服务器端获取信息的最直观的请求。比如,在爬虫中使用的<urllib模块>,<requests模块>等都是封装了HTTP协议,作为一个HTTP客户端实现了博文,图片,视频等信息源的下载。但是HTTP也不是直接就可以用的,它的请求是建立在一些底层协议的基础上完成的。如TCP/IP协议栈中,HTTP需要TCP的三次握手连接成功后才能向服务器发起请求。当然,如果是HTTPS的话,还需要TSL和SSL安全层。2.2网页抓取:爬虫基础互联网的关键技术就是TCP/IP协议。两台计算机之间的通信是通过TCP/IP协议在因特网上进行的。实际上这个是两个协议:TCP(TransmissionControlProtocol,传输控制协议)和IP(InternetProtocol,网际协议)。TCP/IP就是TCP和IP两个协议在一起协同工作,有上下层次的关系。TCP负责应用软件(比如你的浏览器)和网络软件之间的通信。IP负责计算机之间的通信。TCP负责将数据分割并装入IP包,IP负责将包发送至接受者,传输过程要经IP路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址,然后在它们到达的时候重新组合它们。IP:计算机之间的通信。IP协议是计算机用来相互识别的通信的一种机制,每台计算机都有一个IP。用来在internet上标识这台计算机。IP负责在因特网上发送和接收数据包。通过IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送。IP负责将每个包路由至它的目的地。IP协议仅仅是允许计算机相互发消息,但它并不检查消息是否以发送的次序到达而且没有损坏(只检查关键的头数据)。为了提供消息检验功能,直接在IP协议上设计了传输控制协议TCP。2.2网页抓取:爬虫基础HTTP工作过程,一次HTTP操作称为一个事务,其工作整个过程如下:(1)地址解析。如用客户端浏览器请求这个页面::8080/index.html从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:①协议名:http②主机名:③端口:8080④对象路径:/index.htm在这一步,需要域名系统DNS解析域名,得主机的IP地址。(2)封装HTTP请求数据包。把以上部分结合本机自己的信息,封装成一个HTTP请求数据包2.2网页抓取:爬虫基础3)封装成TCP包,建立TCP连接(TCP的三次握手)。在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 41079.3-2024液态金属物理性能测定方法第3部分:黏度的测定
- 简单版工厂转让合同协议2篇
- 2024年度建筑施工沟通协调合同3篇
- 某城市地理环境课件
- 2024年度二手电动车广告投放合同2篇
- 零售店劳动合同范本
- 工程伦理课件下载
- 运维技术服务合同
- 2024年度二七区郭家咀铁三官庙N06地块安置区供排水工程合同2篇
- 公司股东入股合作协议书
- 感恩父母励志学习主题班会
- 《预防传染病》 完整版课件
- 电加热设备安全检查表
- 如何应对压力下的时间管理
- (2024版)小学六年级数学空间与图形培养立体思维
- 京东管理者手册
- 辽宁六地红色文化
- 防范暴风雨和台风的基本常识
- 工业与民用配电设计:第四版手册
- 《国际经济法案例》课件
- 陪诊项目计划书
评论
0/150
提交评论