第8单元8.4网络爬虫应用(课件)-《程序设计基础-Python》(高教版)同步精品课堂

2026-01-13
| 46页
| 110人阅读
| 0人下载
精品

内容正文:

8.4网络爬虫应用 程序设计基础Python 同步精品课堂 高教版 掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。 教学目标 一 1. 理解网络爬虫的概念和基本工作流程。 2. 掌握 requests 模块的 get() 方法、响应对象的常用属性及异常处理。 3. 掌握 bs4 模块创建 BeautifulSoup 对象的方法,以及标签获取、 select 选择器的使用规则。 4. 理解爬取油价案例的核心逻辑,能整合 requests 和 bs4 实现简单数据爬取。 教学重难点 二 (一)教学重点 1.  requests.get() 方法的使用及响应对象属性的应用。 2.  BeautifulSoup 对象的创建及标签的基本获取方法。 3.  bs4 的 select 选择器的语法规则。 (二)教学难点 1. 响应编码的设置及中文乱码的解决。 2.  select 选择器的复合语法的理解与应用。 3. 爬取油价案例中“请求-解析-提取-展示”的逻辑整合。 导入新课 三 同学们在玩游戏的时候,例如图片中的游戏,该人物有很多皮肤。而这个游戏中的人物又有很多,我们有时候想知道每个英雄都有哪些皮肤的时候,需要点开每个英雄,才能看到每个英雄有哪些皮肤,那有没有其他办法呢?下面请大家看一下下面这个视频。 导入新课 三 今天我们就来用Python来学习体验一下爬虫的魅力。。 新知讲授 四 一、网络爬虫的概述 网络爬虫工作流程步骤: ①获取初始的URL,该地址是用户自己制定初始爬取的网页。 ②爬取对应URL地址的网页时,获取新的URL地址。 ③将新的URL地址放入URL队列中 ④从URL队列中读取新的URL,然后根据新的URL爬取网页,同时从新的网页中获取新的URL地址,重复上述的爬取过程。 ⑤设置停止条件,如果没有设置停止条件,爬虫会一直爬取下去,直到无法获取新的URL地址为止。设置了停止条件后,爬虫会在满足停止条件时停止爬取。 新知讲授 四 二、requests模块 我们要用Python实现收集数据的功能,需要在Python安装第三方模块,requests。 requests模块是一个用于网络请求的模块,主要用来模拟浏览器发请求,获取响应数据。下面是通过Pycharm安装requests模块的过程。 如果出现下图,表示安装成功。 新知讲授 四 三、requests使用方法 res=requests.get(url,params=None,**kwargs) 构造一个向服务器请求资源的request对象,返回一个response对象即res,其包含从服务器返回的所有的相关资源。 get方法中的url参数是获取页面的url链接。params参数代表url中的额外参数,字典或字节流格式,可选。**kwargs参数是12个控制访问的参数,可选。 外通常用res.status_code来检查返回的response对象的状态,如果状态是200,就可以用res.text、res.encoding、res.apparent_encoding和res.content等解析返回的内容。 新知讲授 四 四、requests使用方法举例 【例】通过requests模块爬取学科网主页,并打印返回的响应内容。可用如下代码实现。 01 import requests 02 url = "https://www.zxxk.com" 03 res = requests.get(url) 04 res.encoding = "utf-8" 05 print(res.text) 新知讲授 四 五、requests异常处理 使用requests模块爬取网页时,如果给出的url是一个无效链接,或出现url无法解析的情况,将无法正常爬取网页内容。如视频所示。 新知讲授 四 五、requests异常处理 此时我们要对异常进行处理。异常处理函数如下: raise_for_status() 上述方法是专门与异常打交道的方法,它能够判断返回的response类型状态是不是200。如果是200,他将表示返回的内容是正确的,如果不是200,就会产生一个HttpError的异常。 新知讲授 四 五、requests异常处理举例 【例】下述代码是通过requests模块加入异常处理的爬取学科网的例子。 01 import requests 02 url = "https://www.zxxk.com" 03 try: 04 res = requests.get(url) 05 res.raise_for_status() 06 res.encoding = res.apparent_encoding 07 print(res.text) 08 except: 09 print("出现异常") 新知讲授 四 五、requests异常处理举例 【例】下述代码是通过requests模块加入异常处理的爬取学科网的例子。 采用try...except结构来进行异常处理: 程序首先执行try中代码块,如果执行过程中出现异常,系统会自动生成异常类型。如果Python解释器找不到处理异常的except块,则程序终止运行。 新知讲授 四 六、构建BeautifulSoup对象 我们通过requests模块获取网页后,一般要获取网页的数据,此时我们要用到Python另外一个模块,bs4模块。 bs4模块对获取的HTML文本进行解析、定位和提取,从杂乱的代码中精准找到需要的数据。requests模块和bs4模块通常协同工作,过程如下:。 requests.get(url)  → 获取网页源代码 →  BeautifulSoup(源代码, "html.parser")  → 提取目标数据 新知讲授 四 六、构建BeautifulSoup对象 bs4模块同样需要安装,过程如下: 表示安装成功 新知讲授 四 七、构建BeautifulSoup对象的方法 BeautifulSoup(markup,features,…) 上述方法中我们着重介绍前两个参数,markup表示要解析的文档字符串或文件对象;features表示解析器的名称,bs4支持的解析器包括Python标准库(html.parser)、lxml XML解析器(lxml-xml)、lxml HTML解析器(lxml)和html5lib(html5lib),其余参数都可以用默认值。 上述创建BeautifulSoup对象实际python是调佣BeautifulSoup类的构造函数__init__(),当创建BeautifulSoup类的对象时,系统会自动且第一个调用构造函数。我们只需传递适当的参数即可。 新知讲授 四 八、构建BeautifulSoup对象举例 【例】通过requests模块爬取学科网主页,并通过BeautifulSoup对象格式化打印返回的响应内容。可用如下代码实现。 01 import requests 02 from bs4 import BeautifulSoup 03 url = "https://www.zxxk.com" 04 res = requests.get(url) 05 res.encoding = "utf-8" 06 soup = BeautifulSoup(res.text, "html.parser") 07 print(soup.prettify()) # 格式化输出 新知讲授 四 八、构建BeautifulSoup对象举例--效果展示 【例】通过requests模块爬取学科网主页,并通过BeautifulSoup对象格式化打印返回的响应内容。可用如下代码实现。 大家可能感觉和之前直接获取网页代码输出的一样,下面咱们对比一下两段代码输出的结果页面就可以看出区别。 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 九、构建BeautifulSoup对象举例--效果展示 print(res.text) 会原样输出上述字符串(格式杂乱) soup.prettify() 会格式化输出(补全闭合标签、规范缩进) import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十、标签 Tag通常理解为HTML中的一个个标签,如: <head><title>The Dormouse's story</title></head> <a class="sister" href=" " id="link1"><!-- Elsie --></a > <p class="title" name="dromouse"><b>The Dormouse's story</b></p > 中的title、head、a、p、b都是标签。 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十、标签 Tag内容的获取及属性介绍: BeautifulSoup对象名.标签 BeautifulSoup对象名.标签.name BeautifulSoup对象名.标签.attrs BeautifulSoup对象名.标签.string BeautifulSoup对象名.标签用来获取html代码中某一标签内的内容。该方法查找的是在所有内容中的第一个符合要求的标签。 BeautifulSoup对象名.标签.name获取的值为标签本身的名称。如果是BeautifulSoup对象名.name则获得的是[document],这是一种特殊的情况。 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十、标签 Tag内容的获取及属性介绍: BeautifulSoup对象名.标签 BeautifulSoup对象名.标签.name BeautifulSoup对象名.标签.attrs BeautifulSoup对象名.标签.string BeautifulSoup对象名.标签用来获取html代码中某一标签内的内容。该方法查找的是在所有内容中的第一个符合要求的标签。 BeautifulSoup对象名.标签.name获取的值为标签本身的名称。如果是BeautifulSoup对象名.name则获得的是[document],这是一种特殊的情况。 BeautifulSoup对象名.标签.attrs获取标签所有属性与值,是一个字典。单独获取某一属性值时用BeautifulSoup对象名.标签.get("属性名")或者BeautifulSoup对象名.标签["属性名"]。 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十、标签 Tag内容的获取及属性介绍: BeautifulSoup对象名.标签 BeautifulSoup对象名.标签.name BeautifulSoup对象名.标签.attrs BeautifulSoup对象名.标签.string BeautifulSoup对象名.标签.name获取的值为标签本身的名称。如果是BeautifulSoup对象名.name则获得的是[document],这是一种特殊的情况。 BeautifulSoup对象名.标签.attrs获取标签所有属性与值,是一个字典。单独获取某一属性值时用BeautifulSoup对象名.标签.get("属性名")或者BeautifulSoup对象名.标签["属性名"]。 BeautifulSoup对象名.标签.string获取标签内部的文字。 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十、标签 Tag内容的获取及属性介绍: BeautifulSoup对象名.标签 BeautifulSoup对象名.标签.name BeautifulSoup对象名.标签.attrs BeautifulSoup对象名.标签.string BeautifulSoup对象名.标签.attrs获取标签所有属性与值,是一个字典。单独获取某一属性值时用BeautifulSoup对象名.标签.get("属性名")或者BeautifulSoup对象名.标签["属性名"]。 BeautifulSoup对象名.标签.string获取标签内部的文字。 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十一、标签举例1 【例】下述代码是根据字符串变量html输出title标签内容及标题Test。"<html><head><title>Test</title></head><body>Hi</body></html>"是html字符串变量的内容。可用如下代码实现。 01 from bs4 import BeautifulSoup 02 html = "<html><head><title>Test</title></head><body>Hello</body></html>" 03 soup = BeautifulSoup(html, "html.parser") 04 print(soup.title) # 获取title标签 05 print(soup.title.string) # 获取标签内的文本 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十一、标签举例1--效果展示 【例】下述代码是根据字符串变量html输出title标签内容及标题Test。"<html><head><title>Test</title></head><body>Hi</body></html>"是html字符串变量的内容。可用如下代码实现。 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十一、标签举例2 【例】通过html变量获取meta的charset属性值。html变量是html部分代码,具体为“<head><meta charset=’UTF-8’><title>Test</title></head>”。可用如下代码实现。 01 from bs4 import BeautifulSoup 02 html = '<head><meta charset="UTF-8"><title>Test</title></head>' 03 soup = BeautifulSoup(html, "html.parser") 04 print(soup.meta["charset"]) import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十一、标签举例2--效果展示 【例】通过html变量获取meta的charset属性值。html变量是html部分代码,具体为“<head><meta charset=’UTF-8’><title>Test</title></head>”。可用如下代码实现。 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十二、标签的查找 BeautifulSoup对象名.select(self,selector, namespaces=None, limit=None,**kwargs) select方法返回的是类似一个列表的数据类型。 selector参数是一个字符串表示一个css选择器,选择器可以使用标签、类、id等进行选择。例如选择所有a标签就用“a”表示;如果用类名选择需要在类名前面加英文点号;如果用id查找需要在id名字前加#。 bs4有很多方法来完成标签的查找,我们主要讲解CSS选择器通过select()方法来实现查找功能。 import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十三、标签的查找--举例 【例】下述代码是根据字符串html输出所有a标签内容。 01 from bs4 import BeautifulSoup 02 html = """ 03 <html><head><title>The Dormouse's story</title></head> 04 <body> 05 <p class="title" name="dromouse"><b>The Dormouse's story</b></p> 06 <p class="story">Once upon a time there were three little sisters; 07 and their names were 08 <a href="http:// .com/elsie" class="sister" id="link1"><!-- Elsie --></a>, 09 <a href="http://www. .com/lacie" class="sister" id="link2">Lacie</a> 10 and <a href="http://www. .com/tillie" class="sister" id="link3"> import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十三、标签的查找--举例 【例】下述代码是根据字符串html输出所有a标签内容。 11 Tillie</a>;and they lived at the bottom of a well.</p> 12 <p class="story">...</p>: 13 """ 14 html = html.replace(" ", "") 16 soup = BeautifulSoup(html, "html.parser") 17 res = soup.select("a") 18 for item in res: 19 print(item) import requests from bs4 import BeautifulSoup url = "https://www.zxxk.com" res = requests.get(url) res.encoding = "utf-8" soup = BeautifulSoup(res.text, "html.parser") print(soup.prettify()) # 格式化输出 新知讲授 四 十四、实战案例--爬取油价 我们以爬取这个页面中郑州油价为例子: 首先我们可以通过requests模块获取该网站的html代码 新知讲授 四 十四、实战案例--爬取油价 首先我们可以通过requests模块获取该网站的html代码 操作如下: 新知讲授 四 十四、实战案例--爬取油价 获取到网页代码后,我们分析网页中的代码哪些含有郑州油价的信息,然后提取出来。 经过分析发现,郑州油价出现在多个标签中,我们由于对HTML标签语言不熟悉,所以只提取最简单的元标签中郑州油价为例。感兴趣的同学可以提取ul标签中的郑州油价输出。 新知讲授 四 十四、实战案例--爬取油价 操作如下: 师生互动 五 <div id="youjia"><dl><dt>A省92#汽油</dt><dd>9.26</dd></dl> <dl><dt>A省95#汽油</dt><dd>9.89</dd></dl> <dl><dt>A省98#汽油</dt><dd>10.72</dd></dl> <dl><dt>A省0#柴油</dt><dd>9.08</dd></dl> </div> 1.“如何用 select 获取id为 youjia 的 div 中的 dt 标签?” “如何获取div中的dd标签?” 2.大家分组抢答,答对者获得小奖励。, 随堂练习 1.下列关于网络爬虫的定义,描述正确的是() A. 只能抓取图片信息的程序 B. 按规则自动抓取网页信息的程序/脚本 C. 用于编写网页的脚本工具 D. 仅能通过Python内置库实现的程序 【答案】B 【解析】网络爬虫又称网页蜘蛛,是按照一定规则自动抓取网页信息的程序或脚本,可通过多种编程语言的第三方库实现,并非仅抓取图片、编写网页,也不是只能用Python内置库实现。 六 随堂练习 2.requests.get() 方法中,参数 url 的作用是() A. 设置响应编码格式 B. 传递URL中的额外参数 C. 指定拟爬取页面的URL链接 D. 控制访问的额外参数 【答案】C 【解析】 requests.get() 中 url 参数是拟爬取页面的统一资源定位符; params 是URL中的额外参数, **kwargs 是控制访问的参数, res.encoding 用于设置响应编码。 六 随堂练习 3.响应对象的 status_code 属性值为200,表示() A. 网页爬取失败 B. 网页连接成功 C. 编码设置错误 D. 网络请求超时 【答案】B 【解析】 status_code 返回HTTP请求的状态码,200是标准的成功响应状态码,404表示请求的资源不存在,该属性与编码、请求超时无关联。 六 随堂练习 4.解决爬虫中文乱码问题时,常用的设置是() A.  res.status_code = "utf-8"  B.  res.encoding = "utf-8"  C.  res.text = "utf-8"  D.  res.apparent_encoding = "utf-8"  【答案】B 【解析】 res.encoding 用于设置响应内容的编码格式,将其设置为 utf-8 可有效解决多数中文乱码问题; apparent_encoding 是自动分析出的编码,不可直接赋值; status_code 是状态码、 text 是页面文本内容,均不能设置为编码格式。 六 随堂练习 5. raise_for_status() 方法的作用是() A. 直接输出网页文本内容 B. 判断响应状态码是否为200,非200抛出异常 C. 设置爬虫的停止条件 D. 解析HTML文本为树状结构 【答案】B 【解析】 raise_for_status() 是requests库的异常处理方法,会检查响应状态码,若状态码不是200,会抛出 HttpError 异常; res.text 用于输出网页文本,爬虫停止条件需手动设置,bs4模块负责解析HTML文本。 六 随堂练习 6.创建BeautifulSoup对象时,下列语法正确的是() A.  soup = BeautifulSoup(html, "html.parser")  B.  soup = BeautifulSoup("html.parser", html)  C.  soup = BeautifulSoup(html)  D.  soup = BeautifulSoup(parser="html.parser", markup=html)   【答案】A 【解析】创建BeautifulSoup对象的标准语法为 BeautifulSoup(markup, features,...) ,第一个参数是待解析的文本,第二个参数是解析器名称;B参数顺序颠倒,C未指定解析器可能导致兼容性问题,D的参数写法不符合常规语法规范。 六 随堂练习 7.使用 bs4 的 select 方法提取id为 youjia 的 div 中的 dd 标签,语法正确的是() A.  soup.select("youjia dd")  B.  soup.select("#youjia dd")  C.  soup.select(".youjia dd")  D.  soup.select("div#youjia.dd")  【答案】B 【解析】CSS选择器中, # 符号用于匹配指定id的元素,空格表示后代元素,因此 #youjia dd 表示匹配id为 youjia 的元素下的所有 dd 标签;A缺少id选择符 # ,C的 . 是类选择符,D的 .dd 写法错误, dd 是标签名无需加 . 。 六 随堂练习 8.爬取油价案例中,提取标签内的油价数值,需使用Tag的哪个属性() A.  .name  B.  .attrs  C.  .string  D.  .encoding  【答案】C 【解析】Tag对象的 .string 属性用于获取标签内的非嵌套文本内容,可直接提取油价数值; .name 返回标签的名称, .attrs 返回标签的属性字典, .encoding 是requests响应对象的属性,不属于bs4的Tag属性。 六 课堂小结 八 谢谢 EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn EV录屏5.4.1软件录制 Lavf58.33.100 本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn $

资源预览图

第8单元8.4网络爬虫应用(课件)-《程序设计基础-Python》(高教版)同步精品课堂
1
第8单元8.4网络爬虫应用(课件)-《程序设计基础-Python》(高教版)同步精品课堂
2
第8单元8.4网络爬虫应用(课件)-《程序设计基础-Python》(高教版)同步精品课堂
3
第8单元8.4网络爬虫应用(课件)-《程序设计基础-Python》(高教版)同步精品课堂
4
第8单元8.4网络爬虫应用(课件)-《程序设计基础-Python》(高教版)同步精品课堂
5
第8单元8.4网络爬虫应用(课件)-《程序设计基础-Python》(高教版)同步精品课堂
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。