版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章网络爬虫概述第2章网页请求原理与爬虫基础第3章Urllib库与异常处理第4章requests库第5章数据解析技术第6章BeautifulSoup库第7章动态页面爬取第8章爬虫数据的存储第9章爬虫框架Scrapy第10章CrawlSpider第11章图像识别与文字处理第一章网络爬虫概述目录01爬虫的用途爬虫产生背景02爬虫的概念0304爬虫的组成05爬虫的类型爬虫产生背景01爬虫产生背景0102030405企业产生的数据数据平台购买的数据政府/机构公开的数据数据管理咨询公司的数据爬取的网络数据爬虫的概念02爬虫的概念网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者)。如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的猎物数据。爬虫的用途03爬虫的用途(1)通过网络爬虫可以代替手工完成很多事情。例如,使用网络爬虫搜集金融领域的数据资源,将金融经济的发展与相关数据进行集中处理,能够为金融领域的各个方面(如经济发展趋势、金融投资、风险分析等)提供“数据平台”。爬虫的用途(2)浏览网页上的信息时,会看到上面有很多广告信息,十分扰人。这时,可以利用网络爬虫将网页上的信息全部爬取下来,自动过滤掉这些广告,便于对信息的阅读。(3)大数据时代,要进行数据分析,首先要有数据源,而学习爬虫,可以让我们获取更多的数据源,并且这些数据源可以按我们的目的进行采集,去掉很多无关数据。爬虫的用途(4)推销一些理财产品时,需要找到一些目标客户和他们的联系方式。这时,可以利用网络爬虫设置对应的规则,自动从互联网中采集目标用户的联系方式等,以进行营销使用。(5)总而言之,从互联网中釆集信息是一项重要的工作,如果单纯地靠人力进行信息采集,不仅低效烦琐,而且消耗成本高。爬虫的出现在一定程度上代替了手工访问网页,实现自动化采集互联网的数据,从而更高效地利用互联网中的有效信息。爬虫的组成04爬虫的组成控制节点:也叫做爬虫的中央控制器,主要负责根据URL地址分配线程,并调用爬虫结点进行具体的爬行。爬虫节点:按照设定的算法,对网页进行具体的爬行,主要包括下载网页以及对网页的文本进行处理,爬行后,会将对应的爬行结果存储到对应的资源库中。爬虫的类型05爬虫的类型通用爬虫1)深度优先策略:其基本方法是按照深度由低到高的顺序,依次访问下一级网页链接,直到不能再深入为止。爬虫在完成一个爬行分支后返回到上一链接节点进一步搜索其它链接。2)广度优先策略:此策略按照网页内容目录层次深浅来爬行页面,处于较浅目录层次的页面首先被爬行。爬虫的类型聚焦爬虫1)基于内容评价的爬行策略:DeBra将文本相似度的计算方法引入到网络爬虫中,提出了FishSearch算法,它将用户输入的查询词作为主题,包含查询词的页面被视为与主题相关,其局限性在于无法评价页面与主题相关度的高低。2)基于链接结构评价的爬行策略:Web页面作为一种半结构化文档,包含很多结构信息,可用来评价链接重要性。爬虫的类型3)于增强学习的爬行策略:Rennie
和McCallum
将增强学习引入聚焦爬虫,利用贝叶斯分类器,根据整个网页文本和链接文本对超链接进行分类,为每个链接计算出重要性,从而决定链接的访问顺序。4)基于语境图的爬行策略:Diligenti
等人提出了一种通过建立语境图(ContextGraphs)学习网页之间的相关度,训练一个机器学习系统,通过该系统可计算当前页面到相关Web页面的距离,距离越近的页面中的链接优先访问。爬虫的类型累积式和増量式爬虫(1)累积式爬虫,指从某一个时间点开始,通过遍历的方式爬取系统所允许存储和处理的所有网页。在理想的软硬件环境下,经过足够的运行时间,采用累积式爬取的策略可以保证爬取到相当规模的网页集合。(2)增量式爬虫,增量式爬虫只会在需要时爬行新产生或发生更新的页面,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。爬虫的类型表层爬虫和深层爬虫(1)表层爬虫,爬取表层网页的爬虫叫作表层爬虫。表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的Web页面。(2)深层爬虫,爬取深层网页的爬虫就叫作深层爬虫。深层网页是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的Web页面。爬虫的类型深层爬虫爬行过程中最重要的部分就是表单填写,包含两种类型:(1)基于领域知识的表单填写:简单来说就是建立一个填写表单的关键词库,通过语义分析来选取合适的关键词填写表单。(2)基于网页结构分析的表单填写:此方法一般无领域知识或仅有有限的领域知识,将网页表单表示成DOM树,从中提取表单各字段的值并自动地进行表单填写。谢谢观看第二章网页请求原理与爬虫基础目录01网页基础爬虫实现原理02HTTP基础0304抓包工具Fiddler爬虫实现原理01爬虫实现原理01通用爬虫通用爬虫是从互联网中搜集网页,采集信息,采集的网页信息用于为搜索引擎建立索引从而提供支持,决定着整个引擎系统的内容是否丰富,信息是否及时,因此其性能的优劣直接影响着搜索引擎的效果。爬虫实现原理02聚焦爬虫聚焦爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。(1)对抓取目标的描述或定义;(2)对网页或数据的分析与过滤;(3)对URL的搜索策略。HTTP基础02HTTP基础HTTP与HTTPSHTTP的全称是HyperTextTransferProtocol,中文名叫作超文本传输协议。HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档。HTTPS的全称是HyperTextTransferProtocoloverSecureSocketLayer,是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,简称为HTTPS。HTTP基础HTTP请求过程浏览器的主要功能是向服务器发出请求,并在窗口中显示选择的网络资源。HTTP是一套计算机通过网络进行通信的规则,它由两部分组成:客户端请求消息和服务器端响应消息。HTTP基础客户端请求请求由客户端向服务端发出,根据HTTP协议的规定,客户端发送一个HTTP请求到服务器的请求消息,由请求行、请求头部、空行以及请求包体(数据)四部分组成。HTTP基础1.请求行请求行由方法字段、URL字段和HTTP协议版本字段3个部分组成,他们之间使用空格隔开。常用的HTTP请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。2.请求头请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息。3.请求体请求包体不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型Content-Type和包体长度Content-Length。HTTP基础1.请求行请求行由方法字段、URL字段和HTTP协议版本字段3个部分组成,他们之间使用空格隔开。常用的HTTP请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。2.请求头请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息。3.请求体请求包体不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型Content-Type和包体长度Content-Length。HTTP基础服务端响应HTTP基础1.状态行状态码说明100请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。200OK表示客户端请求成功。400BadRequest表示请求未经授权,该状态代码必须与WWW-Authenticate报头域一起使用。403Forbidden表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因。404NotFound请求的资源不存在,例如,输入了错误的URL。500InternalServerError表示服务器发生不可预期的错误,导致无法完成客户端的请求。503ServiceUnavailable表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。HTTP基础2.响应头响应头包含了服务器对请求的应答信息,如Location、Server、Set-Cookie等。下面简要说明一些常用的头信息。Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;HTTP基础3.响应包体服务器返回给客户端的文本信息,我们要获取的正文数据都在响应体中。网页基础03网页基础网页组成网站我们都知道是网页构成的,那么网页是由哪一些构成的呢?网页可以分为三大部分——HTML、CSS和JavaScript。网页基础1.HTMLHTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。网页基础2.CSS层叠样式表(英文全称:CascadingStyleSheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。网页基础3.JavaScriptJavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。抓包工具Fiddler04抓包工具FiddlerFiddler简介Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。
Fiddler要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。抓包工具FiddlerFiddler工作原理与界面在学习使用Fiddler之前,我们首先需要对Fiddler的基本原理以及基本界面进行简单的了解。Fiddler本质是一个Web代理服务器,它的默认工作端口是8888。代理服务器定义:Web代理(ProxyServer)服务器是网络的中间实体。代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。HTTP的代理服务器既是Web服务器又是Web客户端。抓包工具FiddlerFiddler爬取HTTPS设置如果要使用Fiddler工具爬取HTTPS网页,还需要进行一些设置。操作步骤如下:(1)在浏览器中访问抓包工具Fiddler抓包工具Fiddler(2)打开Fiddler,选择菜单栏中的Tools—>Options,打开Options对话框,抓包工具Fiddler(3)在Options对话框中点击HTTPS设置选项,勾选选择项。抓包工具Fiddler点击Actions,点击第二项:ExportRootCertificatetoDesktop导出根证书到桌面,这时候桌面上会出现证书FiddlerRoot.cer文件,点击OK设置成功,关闭Fiddler。抓包工具Fiddler使用Fiddler捕获Chrome浏览器发送的会话时,可以自动将浏览器设置为使用Fiddler作为代理服务器,但是如果Fiddler非正常退出时,会导致Chrome的代理服务器无法恢复正常。如果经常使用Fiddler,可能需要手动检查和更改Chrome的代理服务器。这里我们只需要在在浏览器中导入证书FiddlerRoot.cer。Fiddler捕获Chrome会话抓包工具Fiddler(1)打开谷歌浏览器,在浏览器上输入:chrome://settings/,找到“高级”设置下的管理证书,或者点击左上角设置导航栏找到隐私设置和安全性下的管理证书功能。抓包工具Fiddler(2)在受信任的根证书颁发机构,对证书进行导入。抓包工具Fiddler抓包工具Fiddler此时,选择“浏览”,找到导出到桌面的证书,点击打开,然后选择下一步。抓包工具Fiddler抓包工具Fiddler抓包工具Fiddler重新打开Fiddler,就可以进行HTTPS抓包了。打开浏览器输入,此时在Fiddler的会话窗口谢谢观看第一章网络爬虫概述目录01超时设置Urllib库简介02代理服务器设置0304异常处理05urllib库爬虫实战——百度贴吧Urllib库简介01Urllib库简介快速使用Urllib爬取网页1.urlopen()(1)data用来指明向服务器发送请求的额外信息。HTTP协议是Python支持的众多网络通信协议(如HTTP、HTTPS、FTP等)中唯一使用data参数的。(2)timeoutTimeout是可选参数,用于设置超时时间,单位为秒,意思就是如果请求超出了设置的这个时间,还没有得到响应,就会抛出异常。Urllib库简介(3)其他参数cafile/capath/cadefault:用于实现可信任的CA证书的HTTPS请求,这些参数很少使用。context:实现SSL加密传输,该参数很少使用。(4)data参数(5)timeout参数Urllib库简介HTTPResponse(1)geturl():用于获取响应内容的URL,该方法可以验证发送的HTTP请求是否被重新调配。(2)info():返回页面的元信息。(3)getcode():返回HTTP请求的响应状态码。HTTPResponse主要包含的方法有read()、readinto()、getheader(name)、getheaders()、fileno()等方法和msg、version、status、reason、debuglevel、closed等属性。Urllib库简介Request参数作用url要请求的url,这是必选参数,其他都是可选参数。data默认为空,该参数表示提交表单数据,同时HTTP请求方法将从默认的GET方式改为POST方式。headersheaders是一个字典类型,是请求头。可以在构造请求时通过headers参数直接构造,也可以通过调用请求实例的add_header()方法添加。origin_req_host指定请求方的host名称或者ip地址unverifiable设置网页是否需要验证,默认是False,这个参数一般也不用设置。methodmethod是一个字符串,用来指定请求使用的方法,比如GET,POST和PUT等。Urllib库简介Urllib数据传输1.URL编码与解码一般来说,URL标准中只会允许一部分ASCII字符比如数字、字母、部分符号等,而其他的一些字符,比如汉字等,是不符合URL标准的。所以如果我们在URL中使用一些其他不符合标准的字符就会出现问题,此时需要进行URL编码方可解决。比如在URL中输入中文或者“:”或者“&"等不符合标准的字符时,需要编码。Urllib库简介Urllib数据传输2.GET请求实例GET请求一般用于向服务器获取数据,有时想在百度上查询一个关键词,我们会打开百度首页,并输入该关键词进行查询,那么这个过程怎样使用爬虫自动实现呢?我们在浏览器中打开百度首页,在搜索框中输入关键词“唯众智创”,然后按回车,此时观察地址栏的变化。Urllib库简介Urllib数据传输3.POST请求实例我们在进行注册、登录等操作的时候,基本哈桑都会遇到POST请求,接下来我们就通过实例来分析如何通过爬虫来实现POST请求。前面分析urlopen()方法时提到过,发送HTTP请求时,如果是以POST方式发送请求,urlopen()方法必须设置data参数。data参数以字典的形式存放数据。Urllib库简介浏览器模拟——Headers请求伪装有的时候,我们无法爬取一些网页,会出现403错误,因为这些网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置。针对这种情况,需要将爬虫程序发出的请求伪装成一个从浏览器发出的请求。伪装浏览器需要自定义请求报头,也就是在发送Request请求时,设置一些Headers信息,模拟浏览器去访问这些网站,此时,就能够解决这个问题。代理服务器设置02代理服务器设置很多网站会检测某一段时间某个IP的访问次数,有时候使用同一个IP去爬取同一个网站上的网页,时间久了之后该网站会禁止来自该IP的访问。针对这种情况,可以使用代理服务器,每隔一段时间换一个代理。如果某个IP被禁止,可以换成其他IP继续爬取数据,使用代理服务器的时候,在目标网站上显示的不是我们的真实IP,而是代理服务器的IP地址。代理服务器设置(1)使用相关的Handler处理器创建特定功能的处理器对象。(2)通过urllib.request.build_opener()方法使用这些处理器对象创建自定义的opener对象。(3)使用自定义的opener对象,调用open()方法发送请求。这里需要注意的是,如果程序中所有的请求都使用自定义的opener,可以使用urllib2.install_opener()将自定义的opener对象定义为全局opener,表示之后凡是调用urlopen,都将使用自定义的opener。超时设置03超时设置在介绍urlopen()方法时我们知道这个方法可以接收多个参数,其中timeout就是用于设置超时时间的。假设有个需求,要爬取1000个网站,如果其中有100个网站需要等待30s才能返回数据,如果要返回所有的数据,至少需要等待3000s。如此长时间的等待显然是不可行的,为此,可以为HTTP请求设置超时时间,一旦超过这个时间,服务器还没有返回响应内容,就会抛出一个超时异常,这个异常需要使用try语句来捕获。异常处理04异常处理URLErrorurllib的error模块定义了由request模块产生的异常。如果出现了问题,request模块便会抛出error模块中定义的异常。一般来说,URLError产生的原因主要有以下几种可能:(1)没有连接网络。(2)服务器连接失败。(4)找不到指定服务器(远程URL不存在)。(5)触发了HTTPError异常处理HTTPErrorURLError可以处理HTTPError异常,而HTTPError无法处理URLError异常,当我们的url是一个不存在的地址时会出现“<urlopenerror[Errno11004]getaddrinfofailed>”的错误信息,原因是没有找到指定服务器。异常处理HTTPErrorURLError可以处理HTTPError异常,而HTTPError无法处理URLError异常,当我们的url是一个不存在的地址时会出现“<urlopenerror[Errno11004]getaddrinfofailed>”的错误信息,原因是没有找到指定服务器。urllib库爬虫实战——百度贴吧05urllib库爬虫实战——百度贴吧urllib库爬虫实战——百度贴吧可以看到URL地址是“/f?kw=java&ie=utf-8&pn=0”,其中/f是基础部分,问号后面的“kw=java”、“pn=0”是参数本分,ie指定的是转码格式。参数部分的“java"是搜索的关键字,pn值与贴吧的页码有关。如果用n表示第几页,那么pn参数的值是按照(n-1)x50的规律进行赋值。例如,百度贴吧中的java吧,前三页对应的URL地址如下:第一页:/f?kw=java&pn=0第二页:/f?kw=java&pn=50第三页:/f?kw=java&pn=100谢谢观看第四章requests库目录01requests库概述02高级用法requests库概述01requests库概述实例引入与urllib库相比,requests库更加深得人心,它不仅能够重复地读取返回的数据,而且还能自动确定响应内容的编码。为了能让大家直观地看到这些变化,下面分别使用urllib库和requests库爬取百度网站中“唯众智创"关键字的搜索结果网页。requests库概述(1)使用urllib库以GET请求的方式爬取网页。(2)使用requests库以GET请求的方式爬取网页。requests库概述request函数功能说明requests.request()构造一个请求,支持以下各方法的基础方法requests.get()获取HTML网页的主要方法,对应于HTTP的GET请求方式requests.head()获取HTML网页头信息的方法,对应于HTTP的HEAD请求方式requests.post()向HTML网页提交POST请求的方法,对应于HTTP的POST请求方式requests.put()向HTML网页提交PUT请求的方法,对应于HTTP的PUT请求方式requests.patch()向HTML网页提交局部修改请求,对应于HTTP的PATCH请求方式requests.delete()向HTML网页提交删除请求,对应于HTTP的DELETE请求方式requests库概述1.GET首先构建一个最简单的GET请求,请求地址为“/get”,这个网站能测试HTTP请求和响应的各种信息,比如cookie、ip、headers和登录验证等,且支持GET、POST等多种方法。如果客户端发起的是GET请求的话,网站就会返回相应的请求信息。requests库概述2.POST了解了最基本的GET请求后,再来看另一种比较常见的请求方式POST。与GET请求一样,我们只需要修改发送请求的方式为POST即可;这里请求的url变成了/post,网站判断请求方式是POST后就会返回相关信息;根据打印的信息可以看出,成功的返回了结果,其中form中的内容就是我们提交的数据,这说明POST请求是发送成功的。requests库概述2.POST了解了最基本的GET请求后,再来看另一种比较常见的请求方式POST。与GET请求一样,我们只需要修改发送请求的方式为POST即可;这里请求的url变成了/post,网站判断请求方式是POST后就会返回相关信息;根据打印的信息可以看出,成功的返回了结果,其中form中的内容就是我们提交的数据,这说明POST请求是发送成功的。requests库概述
responseResponse类的常用属性属性说明Status_codeHTTP请求的返回状态,200表示连接成功,404表示失败textHTTP响应内容的字符串形式,即URL对应的页面内容encoding从HTTP请求头中猜测的响应内容编码方式apparent_encoding从内容中分析出的响应编码的方式(备选编码方式)contentHTTP响应内容的二进制形式requests库概述
Robots协议利用urllib的robotparser模块,可以实现网站Robots协议的分析。本节简单了解一下该模块的用法。2.爬虫名称1.robots.txt文件3.Robotparser高级用法02高级用法文件上传我们知道request可以模拟提交一些数据。也可以用来实现网站文件上传;这个网站会返回响应,里面包含files这个字段,而form字段是空的,这证明文件上传部分会单独有一个files字段来标识。我们可以使用前面爬取的百度贴吧的文件,也可以使用其他文件来上传,更改代码中的文件名字即可。但是文件需要和当前脚本在同一目录下。Cookies使用urllib也可以处理Cookies,但是写法比较复杂。使用requests,只需要一步就可以获取和设置Cookies。高级用法SSL证书验证使用urllib也可以处理Cookies,但是写法比较复杂。使用requests,只需要一步就可以获取和设置Cookies。高级用法会话保持会话对象让你能够跨请求保持某些参数。它也会在同一个Session实例发出所有请求之间保持cookie,期间使用了urllib3的connection.pooling功能。所以如果你向同一个主机发送多个请求的时候,底层的TCP连接将会被重用,从而带来显著的性能提升。高级用法谢谢观看第五章数据解析技术目录01XPath网页数据和结构02lxml0304pyquery网页数据和结构01网页数据和结构网页数据格式对于服务器端来说,它返回给客户端的数据格式可分为非结构化和结构化两种。那么,什么是非结构化数据?什么是结构化数据呢?非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。结构化数据是数据的数据库(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)。网页数据和结构网页结构网页结构即网页内容的布局。创建网页结构实际上就是对网页内容的布局进行规划,网页结构的创建是页面优化的重要环节之一,会直接影响页面的用户体验及相关性,而且还在一定程度上影响网站的整体结构及页面被收录的数量。lxml02lxml安装lxml1.Windows下的安装2.Linux下的安装3.Mac下的安装4.验证安装lxmllxml库的使用1.修正HTML代码2.
读取HTML文件3.
解析HTML文件XPath03XPath节点关系1.父节点2.子节点3.同胞节点4.先辈节点5.后代节点XPathXPath语法1.选取节点2.谓语3.选取未知节点4.选取若干路径5.节点轴pyquery04pyquery
pyquery安装1.pip安装2.whell安装3.验证pyquery使用pyquery1.初始化2.访问节点属性3.动态添加节点属性4.动态添加/修改文本值4.移除节点6.查找节点谢谢观看第六章BeautifulSoup库目录01遍历文档树BeautifulSoup简介02对象种类03BeautifulSoup简介01BeautifulSoup简介BeautifulSoup提供一些简单的、Python式的函数来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为UTF-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式并且BeautifulSoup无法检测到编码,这个时候只需要指定原始编码即可。BeautifulSoup已经成为和lxml、html6lib一样出色的Python解释器,为用户灵活地提供不同的解析策略或强劲的速度。BeautifulSoup简介bs4库会将复杂的HTML文档换成树结构(HTMLDOM),这个结构中的每个节点都是一个Python对象。这些对象可以归纳为如下4种:(1)bs4.element.Tag类:表示HTML中的标签,是最基本的信息组织单元,它有两个非常重要的属性,分别是表示标签名字的name属性和表示标签属性的attrs属性。(2)bs4.element.NavigableString类:表示HTML中标签的文本(非属性字符串)。(3)bs4.BeautifulSoup类:表示HTMLDOM中的全部内容,支持遍历文档树和搜索文档树的大部分方法。(4)bs4.element.Comment类:表示标签内字符串的注释部分,是一种特殊的NavigableString对象。BeautifulSoup简介使用bs4的一般流程如下:(1)创建一个BeautifulSoup类型的对象。根据HTML或者文件创建BeautifulSoup对象。(2)通过BeautifulSoup对象的操作方法进行解读搜索。根据DOM树进行各种节点的搜索(例如,find—all()方法可以搜索出所有满足要求的节点,find()方法只会搜索岀第一个满足要求的节点),只要获得了一个节点,就可以访问节点的名称、属性和文本。(3)利用DOM树结构标签的特性,进行更为详细的节点信息提取。在搜索节点时,也可以按照节点的名称、节点的属性或者节点的文字进行搜索。BeautifulSoup简介上述流程如图对象种类02对象种类TagTag是什么?通俗点讲就是HTML中的一个个标签。1.name2.Attributes对象种类NavigableString字符串常被包含在tag内,前面我们已经获取到了标签的属性等内容,如果想要获取标签里面的文字信息,可以使用.string。对象种类BeautifulSoupBeautifulSoup对象表示的是一个文档的全部内容.大部分时候,可以把它当作Tag对象,是一个特殊的Tag。因为BeautifulSoup对象并不是真正的HTML或XML的tag,所以它没有name和attribute属性。但有时查看它的.name属性是很方便的,所以BeautifulSoup对象包含了一个值为“[document]”的特殊属性.name。对象种类CommentTag,NavigableString,BeautifulSoup几乎覆盖了html和xml中的所有内容,但是还有一些特殊对象。Comment对象是一个特殊类型的NavigableString对象,输出的内容不包括注释符号,如果不好好处理它,可能会对我们的文本处理造成一些不必要的麻烦。遍历文档树03遍历文档树子节点一个Tag可能包含多个字符串或其它的Tag,这些都是这个Tag的子节点。BeautifulSoup提供了许多操作和遍历子节点的属性。注意:BeautifulSoup中字符串节点不支持这些属性,因为字符串没有子节点。1..contents2..children3..descendants4..string5..strings和stripped_strings遍历文档树父节点每个tag或字符串都有父节点:被包含在某个tag。1..parent2..parents遍历文档树兄弟节点1..next_sibling和.previous_sibling2..next_siblings和.previous_siblings遍历文档树前后节点1..next_element和.previous_element2..next_elements和.previous_elements遍历文档树搜索文档树1.find_all()2.find(name,attrs,recursive,text,**kwargs)1)name参数2)attrs参数3)text参数4)limit参数5)recursive参数3.find_parents()和find_parent()4.find_next_siblings()和find_next_sibling()5.find_previous_siblings()和find_previous_sibling()6.find_all_next()和find_next()7.find_all_previous()和find_previous()遍历文档树CSS选择器除了bs4库提供的操作方法以外,还可以使用CSS选择器进行査找。什么是CSS呢?CSS(CascadingStyleSheets,层叠样式表)是一种用来表现HTML或XML等文件样式的计算机语言,它不仅可以静态地修饰网页,而且可以配合各种脚本语言动态地对网页各元素进行格式化。要想使用CSS对HTML页面中的元素实现一对一、一对多或多对一的控制,需要用到CSS选择器。谢谢观看第七章动态页面爬取目录01动态网页介绍02安装selenium和PhantomJS模块03Selenium和PhantomJS基本操作动态网页介绍01动态网页介绍所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。动态网页上使用的技术主要包括以下几种:1、JavaScript2、jQuery3、AJAX4、DHTML安装selenium和PhantomJS模块02安装selenium和PhantomJS模块1.Selenium2.PhantomJSSelenium是一个Web的自动化测试工具,其最初是为网站自动化测试而开发的,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript动态渲染的页面来说,此种抓取方式非常有效。PhantomJS是一个基于webkit的JavaScriptAPI。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。Selenium和PhantomJS基本操作03Selenium和PhantomJS基本操作1、基本使用3、节点查找5、填充表单4、鼠标动作链6、弹窗处理2、声明浏览器对象7、页面切换8、页面前进和后退9、Cookies10、页面等待谢谢观看第八章爬虫数据的存储目录01数据库存储数据存储概述02文件存储03数据存储概述01数据存储概述数据存储对象包括数据流在加工过程中产生的临时文件或加工过程中需要查找的信息。数据以某种格式记录在计算机内部或外部存储介质上。数据存储要命名,这种命名要反映信息特征的组成含义。数据流反映了系统中流动的数据,表现出动态数据的特征;数据存储反映系统中静止的数据,表现出静态数据的特征。文件存储02文件存储文件存储形式多种多样,比如可以保存成TXT纯文本形式,也可以保存为JSON格式、CSV格式等,本节主演讲解文本文件的存储方式。1、TXT文本存储将数据保存到TXT文本的操作非常简单,而且TXT文本几乎兼容任何平台,但缺点是不利于检索。文件存储
2、JSON文件存储JSON(JavaScriptObjectNotation,JS对象简谱)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。文件存储3、把数据存储到CSV逗号分隔值(Comma-SeparatedValues,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。数据库存储03数据库存储MySQL关系型数据库有多种,如SQLite、MySQL、Oracle、SQLServer、DB2等。1.准备工作2.PyMySQL第三方库安装3.连接数据库4.插入数据数据库存储MongoDBMongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,具有免费、操作简单、面向文档存储的特点,旨在为Web应用提供可扩展的高性能数据存储解决方案。谢谢观看第九章爬虫框架Scrapy目录01Scrapy基本操作常见Python爬虫框架02Scrapy安装与配置03Scrapy架构04常见Python爬虫框架01常见Python爬虫框架1.ScrapyScrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。是目前Python中使用最广泛的爬虫框架。常见Python爬虫框架2.CrawleyCrawley是用Python开发出的、基于非阻塞(NIO)的Python爬虫框架,可以高速爬取对应网站的内容,支持关系和非关系数据库(如MongoDB、Postgre、MySQL、Oracle、Sqlite等),数据可以导出为JSON、XML、CSV等。Crawley框架官网地址是/。3.PortiaPortia是scrapyhub开源的一款可视化的爬虫规则编写工具。它提供可视化的Web页面,你只需要通过点击标注页面上你需要抽取的数据,不需要任何编程知识即可完成规则的开发。常见Python爬虫框架4.GrabGrab是一个用于构建Web刮板的Python框架。借助Grab,可以构建各种复杂的网页抓取工具,从简单的5行脚本到处理数百万个网页的复杂异步网站抓取工具。Grab提供一个API用于执行网络请求和处理接收到的内容,例如与HTML文档的DOM树进行交互。5.ColaCola是一个分布式的爬虫框架,对于用户来说,只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。常见Python爬虫框架6.Python-gooseGoose本身是一个用Java语言编写的用于提取文章的框架,Python-goose是用Python语言对goose框架的重新实现。Python-goose的设计目的是爬取新闻和网页文章,并从中提取以下内容:文章主体内容文章主要图片文章中嵌入的任何Youtube/Vimeo视频元描述元标签Scrapy安装与配置02Scrapy安装与配置Windows下的安装与配置要安装Scrapy首先要具备Python的开发环境,而Python有2.X的版本和3.X两个版本,现在的主流是Python3,所以这里安装Scrapy也是基于Python3的。Scrapy的安装方式很多,官网上给出了4种安装方法,PyPI、Conda、APT、Source安装,这里使用PyPI,也就是pip安装。由于Windows本身不带Python,所以在安装之前需要安装Python3,然后就可以通过pip命令安装了。Scrapy安装与配置Linux下的安装与配置这里还是以Python3为例讲解如何在Linux中安装Scrapy,使用的Linux版本为Centos7。在Linux中自带Python2,Python2在部分场景中仍然适用,所以我们首先需要在保留现有Python版本的基础上,再安装Python3。在安装之前,应该先确定Linux上已经安装了最新Python和pip。在Linux上安装的命令与Windows相同。Scrapy安装与配置MAC下的安装与配置如果使用的是苹果的MAC系统,要想在MAC中使用Scrapy,首先需要在MAC中安装好Scrapy,那么怎么在MacOS下安装Scrapy?MAC中,同样自带Python,目前自带2.x版本的Python,可以打开终端,输入python-V命令查看。Scrapy基本操作03Scrapy基本操作项目创建安装好Scrapy后,就可以利用Scrapy创建爬虫项目了。使用Scrapy创建爬虫项目,可以使用startproject命令实现,命令格式如下:scrapystartproject项目名称在创建项目之前,首先要选取合适的项目存储路径。进入自定义的项目目录,使用命令创建一个爬虫项目,命令如下:scrapystartprojectmySpiderScrapy基本操作文件介绍这个命令会创建一个名为mySpider的项目Scrapy基本操作代码编写下面以BOSS直聘网站IT·互联网方向的热招职位为例,需要爬取的字段有岗位名称、薪资、公司名称。网站地址为/wuhan/,Scrapy基本操作防止反爬虫我们在运行爬虫的时候,如果爬取的网页较多,可能会受到目标服务器的限制,从而被禁止,这是因为很多很多网络爬虫对网页的爬取能力很差,经常并发上百个请求循环重复爬取,这种爬虫对中小型网站造成的访问压力非常大,很可能会导致网站访问速度缓慢、甚至无法访问,因此现在的网站会采取一些防爬虫措施来阻止爬虫的不当爬取行为。Scrapy基本操作常用命令Scrapy架构04文件存储
Scrapy框架介绍文件存储数据流Scrapy中的数据流有引擎控制,数据流的过程如下:Engine首先打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬取的URL。Engine从Spider中获取到第一个要爬取的URL,封装成Request并交给调度器。Engine向Scheduler请求下一个要爬取的URL。调度器返回下一个要爬取的URL给引擎,Engine将URL通过下载中间件转发给Downloader下载。一旦页面下载完毕,Downloader生成该页面的Response,并将其通过DownloaderMiddlewares发送给Engine。Engine从下载器中接收到Response,并将其通过SpiderMiddlewares发送给Spider处理。Spider处理Response,并返回爬取到的Item及新的Request给Engine。Engine将Spider爬取到的的Item给ItemPipeline,将新的Request给Scheduler。谢谢观看第十章CrawlSpider目录01CrawlSpider实战CrawlSpider简介02LinkExtractor链接提取03CrawlSpider简介01CrawlSpider简介在前面我们学习了如何编写自动爬取网页的爬虫,我们可以通过分析网页的URL地址格式,然后通过拼接URL的形式来获取每个页面上的数据。其实,在Scrapy框架中,提供了一种自带的自动爬取网页的爬虫Craw
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48218-2026工业互联网平台工业机理模型评价方法
- AI在汉语言文学中的应用
- PHP基础测试题(含详细答案)
- 幼儿园食品安全方案
- PET全真模拟考试题(含详细答案解析)
- 电商仓库消防喷淋系统运维检测方案
- 玻璃中空线安全操作规程
- 药物过度使用性头痛阶梯撤药方案共识
- 2025-2026学年内蒙古自治区乌海市初中生物七年级期末上册高分通关经典测试题详细参考解析
- Oracle数据库基础考核试题(含详细答案解析)
- 2026年质量员之设备安装质量专业管理实务能力测试试题带答案
- 2026 劳动争议调解仲裁法测试试题及答案
- 2026年大学钻探技术(钻探施工技术)试题及答案
- 2026年天津中考英语试题【含答案】
- 2026医师定考简易程序人文考试题库及答案
- 室内装饰装修(轻钢龙骨、隔墙、吊顶)保护性拆除施工组织设计方案
- 矿区附近采空区探放水设计及安全技术措施培训
- 2026年6月英语六级真题(第一套)及答案解析
- 环卫道路清扫安全培训课件
- 高位货架库房管理制度
- 教学课件-大气污染治理技术教材配套(张小广)
评论
0/150
提交评论