版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务1Requests数据采集
任务2BeautifulSoup文本解析任务1Requests数据采集本次任务基于Requests库实现豆瓣电影排行信息的爬取,其中包含与HTTP请求相关的内容、Requests的安装和使用、爬虫的实现、Requests实现爬虫、爬取信息JSON化等内容。本次任务的主要内容如下:(1)安装Requests,成功调用Requests库。(2)分析豆瓣电影信息网站。(3)编写代码,爬取信息。(4)将爬取的信息JSON化,并输出。【任务描述】一、网络请求网络请求是客户端和服务器端进行数据交换的一种手段。通过网络请求,客户端可以从服务器端获取需要的数据,也可以在收到请求后返回数据。网络请求过程如图3-1所示。客户端要获取某些信息,会通过网络向服务器端发送一个请求,服务器端会对请求进行拆解,并通过自己的存储空间或者数据库搜索数据,然后将数据返回到客户端。【知识准备】1. HTTP请求HTTP请求是指从客户端到服务器端的请求消息,包括消息首行中、对资源的请求方法、资源的标识符及使用的协议。只有通过HTTP才能实现网络请求。HTTP还规定了请求的数据格式、请求的头部、采用的协议等内容。HTTP请求都是通过URL发起的。URL的形式如图3-2所示。每访问一次,URL就进行一次网络请求,每进行一次网络请求,服务器端对应会收到一个网络响应。例如,访问百度网的地址/,打开浏览器,在地址栏输入地址,按鼠标右键选择“检查”,对地址按下回车键,浏览器开发者工具的“Network”栏中会产生一个网络请求,如图3-3所示。每一个网络请求都有Name、Status、Type、Initiator、Size、Time、Waterfall等属性。属性说明如表3-1所示。2.请求和响应请求是指从客户端到服务器端的请求消息。一个完整的HTTP请求可以分为三个部分:请求行、请求头、请求体。请求结构如图3-4所示。请求行中包含请求的方法、请求的URL、协议版本及换行符号(CRLF);请求头中包含多组键值对的数据和换行符号;请求体当中包含请求的主体。响应是指服务端对客户端请求的回应。一个完整的响应同样包含三个部分,分别是状态码、响应头和响应体。响应头中包含服务器的应答信息,即Content-Type、Data、Expires等内容。一个响应最重要的内容就是响应体,响应的正文数据、文件、图片等信息都称为响应体。例如,请求一个地址时,通过浏览器中的“Preview”就可以查看响应体的内容。访问百度网的响应信息如图3-5所示。二、爬虫基础爬虫是获取网页并提取和保存信息的自动化程序。如果将互联网比作一张蜘蛛网,爬虫就是在网上爬行的蜘蛛,网上的每一个节点都可以当作一个网页,蜘蛛爬到每一个节点就相当于访问了网页,而每一个节点又连着许多节点,这些节点就可以当作网页内的链接,因此爬虫可以访问所有的节点。爬虫的架构如图3-6所示。爬虫调度器开启后,爬虫会指定一个链接(URL),爬虫使用这个链接请求对应的资源,对页面进行下载,下载后对网页进行解析,网页中包含的URL会继续解析,直到解析完所有的URL就完成了一次爬取。整个爬取过程可以分为三个步骤,分别是爬取数据、提取信息以及保存数据。(1)每个爬虫程序都有若干个请求和响应,响应的内容是网页的源代码。(2)获取到网页的源代码后,需要提取源代码中有价值的信息。(3)最后一步就是将提取到的数据保存下来,以便于进行数据分析和处理。三、Requests简介及安装Requests是唯一一个非转基因的PythonHTTP库。在Requests之前,PythonHTTP库就出现过urllib库,但是由于urllib存在安全缺陷以及代码冗余等,现在已经很少使用。Requests库建立在urllib之上,它解决了urllib存在的问题,而且允许用户发送原始的HTTP1.1版本的请求。Requests的图标如图3-7所示。Requests的安装简单,可使用pip命令安装。代码如下所示。安装完成后,使用import引入Requests库,调用Requests的get()方法向发送请求,代码如下所示。结果如图3-8所示。四、Requests的基础使用Requests爬虫是利用Requests技术实现爬取网页内容的一种功能,但是在实现Requests爬虫之前需要了解更多的Requests技术,否则会在实现Requests爬虫的过程中遇到诸多问题。Requests可以使用get()方法和post()方法发送请求,除发起请求的方式不同外,get()和post()的参数和使用方法都相同。下面以get()方法为例,介绍如何使用Requests向URL发起请求。requests.get()请求方法包含的部分参数如表3-2所示。其中,**kwagrs包含的参数如表3-3所示。在使用requests.get()请求url时会返回一个Response对象,该对象包含了多个用于查看详细信息的属性。Response对象包含的部分属性如表3-4所示。使用requests.get()方法访问“”,并且使用params参数传入请求数据,请求数据会自动拼接到url上,代码如下所示。此时调用res.url会显示请求时的完整参数,与人工拼接参数相比,这个功能的效率和准确度要高得多。Requests除了可以携带请求参数以外,还可以自定义请求的请求头。请求头由键值对组成,这些键值对包含了数据类型(Content-Type)、时间(Date)、跨域资源访问(Access-Control-Allow-Origin)、用户代理(User-Agent)等。在使用爬虫爬取网页数据时,需要通过请求头将请求伪装成从浏览器发出去的,因为许多网站设置了反爬虫机制,会过滤掉来自除浏览器外的其他请求。伪装成浏览器的方法就是设置用户代理信息(User-Agent)。Requests库除了在请求之前进行设置以外,还可以对输出进行设置。通常情况下,Requests会自动解码来自服务器的内容,大多数unicode字符集都能被无缝解码,但是有时候难免会出现乱码,如图3-10所示,这时可以通过设置输出字符的编码格式进行调整。一般设置res.encoding,即将字符集设置为“utf-8”即可解决。设计字符集的代码如下所示。结果如图3-11所示。另外,可以使用res.content、res.json()和res.text将输出的内容转化成字节形式和JSON形式,三种方法相比较,res.content方法的使用率较低,res.json()和res.text的使用率较高。需要注意的是,如果使用res.json()转化失败,显示转化异常,则即使调用成功,也需要通过res.status_code(状态码)判断请求是否成功,并查明出错的原因。在日常生活中,我们在浏览器中登录了某个网站,当我们第二次打开这个网站的时候不需要登录,直接就是登录状态,这种状态一般会保持七天左右。实现这一功能使用的就是cookie功能,如果请求的响应中携带着cookie信息,则服务器就会通过res.cookies读取cookie的内容,并将cookie信息发送给客户端。也可以通过在请求中设置cookies="要设置的cookies内容"来实现这一功能,代码如下所示。结果如图3-12所示。五、Requests的高级使用Requests有许多高级用法,比如可以让用户跨请求保持某些参数的会话对象、请求和响应对象、SSL证书、事件挂钩、代理等,掌握这些高级的用法是成为高级程序员的关键。1.会话对象会话对象能够跨请求保持某些参数,也会在同一个Session()实例发出的所有请求之间保持cookie。除此之外,会话对象还可以用来提升网络性能,如果向同一主机发送多个请求,底层的TCP连接将会被重用,从而带来显著的性能提升。会话对象Session()方法的使用如下所示。运行上面的代码也会对会话对象设置cookie的信息,如图3-14所示。2.请求和响应对象每一个请求都是一个请求对象(Request),这个对象中包含了请求所需要的URL、请求头、请求参数等内容,这个对象会被发送到所请求的服务器。服务器对每次请求都会返回一个响应对象,服务器返回的时候不是返回数据,而是返回一个Response对象,返回的所有信息都被包含在这个Response对象当中。可以通过“.”方法调用任意对象的内容,代码如下所示。结果如图3-15所示。3. SSL证书SSL证书是数字证书当中的一种,它类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(SecureSocketLayer(SSL)),安全协议是由NetscapeCommunication公司设计开发。安全协议主要用来对用户和服务器进行认证。Requests在使用HTTPS请求时,可以验证SSL证书,这个功能就像web浏览器一样。Requests的SSL验证默认是开启的,如果证书验证失败,Requests会抛出一个SSLError的界面。如果用户没有对网站设置SSL,就需要在请求中添加verify去传入一个受信任的CA证书,比如certfile就是一个CA证书文件,配置CA证书文件方法如下所示。4.事件挂钩Requests支持事件挂钩,钩子(hook)的主要作用是提前在可能增加功能的地方预设一个钩子,当客户需要重新修改或者增加这个地方的逻辑的时候,把扩展的类或者方法挂载到这个点即可。在Requests中,可以用钩子来控制部分请求过程。5.代理Requests可以通过对请求设置proxies参数来设置代理,方法如下所示。任务2BeautifulSoup文本解析本任务主要介绍BeautifulSoup文本解析的使用。利用BeautifulSoup文本解析获取“古诗文网”的诗文数据,如图3-22所示。【任务描述】通过Requests获取到诗文数据以后使用BeautifulSoup的节点选择器、方法选择器以及CSS选择器等功能将文档内容提取,并保存在文本文件中。本章节的主要内容如下:(1)调入项目需要依赖的库。(2)定义主函数和请求头,获取请求的数据。(3)编写代码,逐步拆解数据,并将数据保存到文本文件当中。(4)运行代码,查看输出结果。一、BeautifulSoup环境安装BeautifulSoup是一个Python的HTML/XML解析器,主要功能是解析和提取HTML/XML数据,使用BeautifulSoup可以使用户方便地从网页中提取数据。BeautifulSoup在解析页面源码时,只需要将被解析的内容作为参数传递给BeautifulSoup的构造对象,就可以完成网页中节点、文字、元素的提取。除此之外,BeautifulSoup还会自动将输入的文本转化成unicode的编码格式,输出的文档转化为utf-8的格式。BeautifulSoup的解析效率是人工解析网页效率的几百倍,掌握BeautifulSoup的使用可以省去很多烦琐的提取工作,提高工作效率。BeautifulSoup的安装方法和其他库的安装方法一样,使用Python的pip工具安装,安装工具名称是beautifulsoup4。安装代码如下所示。【知识准备】服务器显示如图3-23结果,即为安装成功。BeautifulSoup不仅支持Python标准库中的HTML解析器,还支持一些第三方的解析器,比如lxmlHTML解析器、lxmlXML解析器和html5lib解析器等。BeautifulSoup支持的解析器如表3-5所示。表3-5中的第三方解析器在使用时需要单独安装,若不安装该解析器,BeautifulSoup会使用Python默认的解析库。如安装lxml解析库的代码如下所示。通过BeautifulSoup的一个使用示例来体现BeautifulSoup的强大之处,定义一个html结构的字符串。通过import引用BeautifulSoup,并使用BeautifulSoup构造对象,传递两个参数,第一个参数是需要解析的内容,第二个参数是设置解析器的类型,之后调用prettify()方法将输入的内容按照标准的缩进格式输出,代码如下所示。结果如图3-24所示。代码中html结构的字符串并不是一个完整的HTML结构,因为body标签和html标签并没有闭合。而BeautifulSoup在输出结果中自动补全了body标签和html标签,即对于不标准的HTML字符串,BeautifulSoup可以自动进行更正。若要提取HTML页面中的文本内容,只需通过BeautifulSoup对象调用get_text()方法即可,代码如下所示。结果如下图所示。二、BeautifulSoup使用使用BeautifulSoup时,需要将一段文档传入BeautifulSoup的构造方法,就能得到一个文档对象,可以传入一段字符串或一个文件句柄。1.对象的种类BeautifulSoup会将HTML文档转换为一个复杂的树形结构,这个树上的每个节点都是Python对象,所有对象可以归纳为4种:Tag、NavigableString、BeautifulSoup和Comment,每个对象都有不同的含义和作用。1) Tag对象Tag对象表示标签。与XML和HTML中的Tag一样,Tag对象在获取属性时默认通过字典的方式存储,若要改变这些属性需要使用为字典赋值的方式进行修改。Tag对象中主要有两个属性,如表3-6所示。2) NavigableString对象NavigableString对象可以返回一个可遍历的字符串。在BeautifulSoup中获取的Tag(标签)中间的字符串就用NavigableString类来包装,因此,可以通过对象Tag的string属性获取到NavigableString类的对象。3) BeautifulSoup对象BeautifulSoup对象表示一个页面的所有内容,也可以看作是一个Tag,这个Tag中包含所有的子标签。BeautifulSoup与其他的Tag存在着不一样的地方,比如“.attribute”是不存在的,因为文档的顶级对象是没有属性的,再比如调用“.name”,只会输出“document”。4) Comment对象Comment对象是NavigableString对象的子类,在提取页面数据方面,Tag对象和BeautifulSoup对象以及NavigableString对象可以实现所有的需求。对于一些特殊的需求,如获取网页的注释,因为网页中的注释只会在网页的源代码中显示,而不显示在页面中,可以使用Comment对象进行获取。2.节点选择器使用BeautifulSoup对象调用节点名称可以获取该节点,再通过调用string属性就可以获取节点内的NavigableString字符串,但是如果遇到节点特别多,结构复杂的网页时,使用这种方式就会显得极为烦琐。在选择节点不能做到一步选择到位时,可以先选择一个元素作为节点,然后选择其子节点、父节点、兄弟节点等,这就是关联选择。1)子节点选择器使用BeautifulSoup对象选择到一个节点以后,如需获取这个节点的子节点(子节点是指当前节点中包含的节点),可以使用子节点选择器,常用子节点选择器分别为contents和children。属性如表3-7所示。2)父节点选择器包含当前节点的节点称之为当前节点的父节点,父节点与子节点存在包含与被包含的关系,Tag对象和字符串对象都被包含在父节点当中的,通过parent和parents属性可以获取当前节点的父节点。属性如表3-8所示。除了使用parent属性获取父节点,还可以使用parents获取父节点。与parent不同的是,parents可以像children属性一样使用for循环遍历,获取a标签后调用parents属性,使用for循环进行输出。3)兄弟节点如果两个节点有一个共同的父节点,那它们就是兄弟节点,可以使用next_sibling属性和previous_sibling属性获取兄弟节点。属性如表3-9所示。3.方法选择器方法选择器常用于搜索文档树,因为文档是结构化的,使用正确的方法搜索文档树能提高搜索的效率。常见的搜索文档树的方法选择器有find_all()和find()方法,掌握这两种方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国自动麻将机行业投资前景及策略咨询研究报告
- 2024至2030年中国氨基醇酸烘干半导体漆行业投资前景及策略咨询研究报告
- 2024至2030年铜芯插座项目投资价值分析报告
- 2024至2030年中国抛投式气胀救生筏行业投资前景及策略咨询研究报告
- 2024至2030年中国工业电炉行业投资前景及策略咨询研究报告
- 2024至2030年中国实木门双开门行业投资前景及策略咨询研究报告
- 2024至2030年汽车电泵项目投资价值分析报告
- 2024至2030年中国四方型锑底行业投资前景及策略咨询研究报告
- 2024至2030年摇粒绒不起球手套项目投资价值分析报告
- 2024至2030年中国卫浴专用电采暖器行业投资前景及策略咨询研究报告
- 2024年湖北省高考政治试卷真题(含答案逐题解析)
- 2024年官方兽医牧运通考试题库(含答案)
- 李白导读学习通超星期末考试答案章节答案2024年
- 2024年秋季新苏教版一年级上册数学课件 期末复习 第1课时 数与运算
- 从偏差行为到卓越一生3.0版
- 高一物理必修一课程纲要Word版
- 土木工程力学(本)试题-2021秋本-土木工程本复习资料-国家开放大学2022年1月期末考试复习资料
- 3505_四自由度SCARA机器人结构设计
- 小学太阳系八大行星
- 装配式施工方案-(修复的)
- 评审专家保密承诺书
评论
0/150
提交评论