版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络信息采集与处理第6章本章目标6.1爬取网页6.2解析网页6.3爬虫应用26.1爬取网页requests库是一个简洁、简单且功能丰富的第三方库,用于处理HTTP请求。它的最大优点是与正常的URL访问过程更接近,使得编写程序变得更加直观。requests库建立在Python语言的urllib3库之上,并对其功能进行了封装,提供了更友好的函数接口。借助requests库,我们可以轻松实现网页爬取,获取网页的HTML源代码或其他数据。使用简单而又功能强大的函数接口,编写网页爬取程序变得更加便捷。36.1爬取网页我们对基于requests进行网页爬取的步骤进行简要介绍:1.安装requests库首先,确保已经安装了requests库。可以通过pip命令进行安装: pipinstallrequests2.导入requests库在Python程序中导入requests库,以便使用其中的功能: importrequests3.发送HTTP请求requests库提供丰富的功能用于进行网页爬取。它是一个简洁且方便的第三方库,让我们可以像正常访问URL一样发送HTTP请求并获取服务器响应的数据。其中,requests库与网页请求相关的函数如表6-1所示。46.1爬取网页5名称说明requests.get(url,[timeout=t])HTTP的GET方式,可选参数timeout=t,表示设置超时时间为t秒的GET方式,可选参数timeout=t,表示设置超时时间为t秒requests.post(url,data={key:value})HTTP的POST方式,参数data为字典类型,表示设置的传输参数的POST方式,参数data为字典类型,表示设置的传输参数requests.put(url,data={key:value})HTTP的PUT方式,参数data为字典类型,表示设置的传输参数的PUT方式,参数data为字典类型,表示设置的传输参数requests.delete(url)HTTP的DELETE方式的DELETE方式requests.head(url)HTTP的HEAD方式的HEAD方式requests.options(url)HTTP的OPTIONS方式的OPTIONS方式表6-1requests库网页请求相关函数的说明如表6-1所示,常使用requests库的get()或post()函数发送HTTP请求。其中,get()用于发送GET请求,post()用于发送POST请求。通常,我们使用get()函数来获取网页的HTML源代码: response=requests.get(url)6.1爬取网页64.处理响应数据获取服务器响应后,可以通过response对象的属性和方法来处理响应数据。其中,response对象常用属性和方法如表6-2所示。表6-2response对象常用属性和方法的说明名称说明response.status_codeHTTP返回状态码,常见的包括200表示成功,404表示找不到网页,500表示服务端错误等返回状态码,常见的包括200表示成功,404表示找不到网页,500表示服务端错误等response.textHTTP返回内容的字符串,对应于网页的文本内容返回内容的字符串,对应于网页的文本内容response.contentHTTP返回内容的二进制,常与decode组合来进行解析,例如response.content.decode("utf-8")返回内容的二进制,常与decode组合来进行解析,例如response.content.decode("utf-8")response.encodingHTTP返回内容的编码类型返回内容的编码类型response.json()HTTP返回内容进行JSON格式的解析返回内容进行JSON格式的解析response.raise_for_status()HTTP返回内容错误信息,一般用于非正常返回状态码情况下的异常分析返回内容错误信息,一般用于非正常返回状态码情况下的异常分析如表6-2所示,获取网页的HTML源代码可以使用response.text属性: html_source=response.text6.1爬取网页75.处理异常情况在进行网页爬取时,可能会遇到各种异常情况,例如网络连接错误或服务器返回错误状态码。如表6-2所示,为了确保程序的稳定性,可以使用try-except语句结合raise_for_status()方法来捕获异常并进行相应处理。6.设置请求头有些网站可能对爬虫进行限制,要求在请求中设置User-Agent等请求头信息。可以通过headers参数来设置请求头: html_source=response.text headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.3' } response=requests.get(url,headers=headers)通过以上简要介绍,我们可以了解基于requests进行网页爬取的基本流程。使用requests库,我们可以快速获取网页数据,并根据需要进行数据处理和分析。然而,在进行网页爬取时,需要注意合法性和网站的规则,以避免对网站造成不必要的负担或其他影响。6.1爬取网页1.importrequests2.try:3.response=requests.get('')4.print(response.status_code)#状态码5.print(response.content.decode("utf-8"))#获取网页内容6.except:7.print('网页请求错误')8【文件6.1】code6_1.py在上面的代码中,第1行代码导入requests库,该库用于发送HTTP请求和处理响应。第2行使用try-except语句进行异常处理,防止出现错误导致程序中断。第3行在try代码块中,发送GET请求到"",并将返回的响应保存在response变量中。第4行使用response.status_code属性获取响应的状态码,并打印出来。状态码用于判断请求是否成功,其中200表示成功。第5行使用response.content.decode("utf-8")方法将响应的字节内容解码为UTF-8编码的字符串,并打印出网页的HTML源代码。第6~7行表示若请求出现异常则输出“网页请求错误”的提示。本章目标6.1爬取网页6.2解析网页6.3爬虫应用96.2解析网页对于使用requests库获取HTML页面后,需要进一步解析HTML页面格式,提取有用信息。为此,我们可以使用beautifulsoup4库(也称为BeautifulSoup库或bs4库)。这个库的最大优点是能根据HTML和XML语法建立解析树,从而高效地解析其中的内容。HTML建立的Web页面往往非常复杂,除了有用的内容信息外,还包括大量用于页面格式的元素。直接解析一个Web网页需要深入了解HTML语法,而且比较复杂。beautifulsoup4库将专业的Web页面格式解析部分封装成函数,提供了若干有用且便捷的处理函数。在使用beautifulsoup4库之前,我们需要进行引用。由于这个库的名字非常特殊且采用面向对象方式组织,我们可以使用from-import方式从库中直接引用BeautifulSoup类。使用beautifulsoup4库可以将HTML页面看作一个对象,通过对象的属性和方法来获取所需的内容信息。例如,可以通过对象.属性的方式调用对象的属性(即包含的内容),或者通过对象.方法的方式调用方法(即处理函数)。106.2解析网页通过结合requests和beautifulsoup4库,可以构建一个简单而强大的网络爬虫,实现对网页内容的解析和提取有用信息的功能。这样,我们就能从复杂的HTML页面中轻松地获取我们所需的数据,为后续的数据分析和应用提供便利。下面我们对基于beautifulsoup4进行网页解析的步骤进行简要介绍:1.安装beautifulsoup4库在命令行中执行以下命令,使用pip安装beautifulsoup4库: pipinstallbeautifulsoup42.导入所需类在Python程序中,使用frombs4importBeautifulSoup语句导入BeautifulSoup类,以便在后续代码中使用。 frombs4importBeautifulSoup116.2解析网页3.获取HTML页面内容使用requests库发送HTTP请求获取HTML页面的内容,并将其转换成字符串。importrequestsresponse=requests.get(url)html_content=response.content.decode("utf-8")4.创建BeautifulSoup对象使用BeautifulSoup类创建一个解析HTML的对象。将步骤3中获取的HTML字符串作为参数传递给BeautifulSoup类的构造函数。soup=BeautifulSoup(html_content,'html.parser')5.解析HTML页面并提取信息基于Python的网络爬虫进行内容解析时,使用beautifulsoup4库来处理HTML页面会创建一个树形结构的对象,其中包含了HTML页面中的每一个标签元素,例如<head>、<body>等。因此我们可使用BeautifulSoup对象的属性和方法来解析HTML页面,提取所需的信息。常见的方法包括find()、find_all()、select()等,它们可以根据标签名、CSS选择器、正则表达式等方式定位和提取信息。其中,BeautifulSoup对象常用属性和方法如表6-3所示。126.2解析网页表6-3BeautifulSoup对象常用属性和方法的说明13名称说明headHTML的<head>内容的<head>内容titleHTML的<title>内容的<title>内容bodyHTML的<body>内容的<body>内容pHTML的第一个<p>内容的第一个<p>内容find(name,attrs,recursive,string)根据参数寻找第一个符合条件的标签,其中name对应标签名称、name对应标签名称、attrs对应标签属性字典、recursive对应查找层次、string对应关键字条件对应标签属性字典、recursive对应查找层次、string对应关键字条件find_all(name,attrs,recursive,string,limit)根据参数寻找所有符合条件的标签列表,其中name对应标签名称、name对应标签名称、attrs对应标签属性字典、recursive对应查找层次、string对应关键字条件、limit对应返回的数目,默认返回全部对应标签属性字典、recursive对应查找层次、string对应关键字条件、limit对应返回的数目,默认返回全部select(selector)根据CSS选择器条件来查找符合条件的表情列表CSS选择器条件来查找符合条件的表情列表6.2解析网页BeautifulSoup库中的标签属性与HTML的标签名称相同,其中每一个标签在BeautifulSoup库中都是一个对象,称为Tag对象。标签对象有以下常用属性:name:表示标签的名称,可以通过Tag对象的name属性获取。attrs:表示标签的属性,是一个字典形式,包含标签中的所有属性和对应的值,可以通过Tag对象的attrs属性获取。string:表示标签的文本内容,即尖括号之间的文本内容,可以通过Tag对象的string属性获取。contents:表示标签的子节点列表,即标签中包含的其他标签或文本内容,可以通过Tag对象的contents属性获取。通过这些属性,我们可以方便地获取标签的名称、属性、文本内容以及子节点信息,并根据需要进行进一步处理和提取。例如,可以通过<a>.name获取标签名称,通过<a>.attrs获取标签的所有属性,通过<a>.string获取标签的文本内容,通过<a>.contents获取标签的子节点列表。146.2解析网页15假设要提取页面的标题和所有链接,则可以使用以下代码:#提取标题内容title=soup.title.text#提取所有链接links=soup.find_all('a')forlinkinlinks:print(link['href'])6.处理解析的信息根据需要对提取的信息进行进一步处理,例如保存到文件、进行数据分析等。6.2解析网页1.importrequests2.frombs4importBeautifulSoup3.try:4.response=requests.get('')#爬取网页5.html_content=response.content.decode("utf-8")#网页内容6.soup=BeautifulSoup(html_content,'html.parser')#网页解析7.links=soup.find_all('a')#提取所有链接8.forlinkinlinks:9.print(link['href'],link.text)#输出url和内容10.except:6.print('网页爬取或解析错误')16【文件6.2】code6_2.py在上面的代码中,在第1~2行导入了requests库和BeautifulSoup库,这两个库是进行网页爬取和内容解析的关键工具。第3行使用try块开始异常处理,以便捕获可能发生的爬取或解析错误。第4行,使用requests.get()方法来爬取了百度首页()的内容,并将结果保存在`response`对象中。第5行使用response.content.decode("utf-8")将网页内容进行解码,并存储在html_content变量中,这样就得到了网页的HTML源代码。第6行使用BeautifulSoup库对网页内容进行解析。BeautifulSoup的构造函数需要传入两个参数:待解析的HTML内容和解析器类型。这里选择了'html.parser'作为解析器类型。第7行使用soup.find_all('a')方法,提取了网页中所有的<a>标签,即所有链接元素。这些链接元素将会作为一个列表存储在links变量中。第8~9行使用for循环遍历links列表中的每个链接元素,并使用link['href']和link.text分别获取链接的URL和链接的文本内容,然后输出到控制台。第10~11行使用except块来捕获可能发生的错误,并输出相应的提示信息。本章目标6.1爬取网页6.2解析网页6.3爬虫应用176.3爬虫应用在全球范围内,大学排名是衡量高校实力和影响力的重要指标之一。尽管排名不能完全客观地反映高校的绝对实力,但它们可以反映出高校之间的相对关系。本节将以软科网站发布的“2023中国大学排名”为例,介绍如何编写一个简单的大学排名爬虫,用于从网络上获取中国大学的排名数据。186.3爬虫应用19大学排名爬虫的构建主要包括三个环节:从网络上获取网页内容、分析网页内容并提取有用数据到恰当的数据结构中、利用数据结构展示或进一步处理数据。本节将介绍如何使用requests和beautifulsoup4库来构建一个简单的大学排名爬虫,并将获取的数据存储在二维列表中。主要步骤可概括如下:1.从网络上获取网页内容使用requests库发送GET请求,获取目标网页的HTML源代码。2.分析网页内容并提取数据使用beautifulsoup4库解析HTML源代码,定位包含排名数据的HTML标签,并从中提取出大学排名及相关数据。3.存储数据到二维列表将提取到的排名数据存储在二维列表中,以便后续处理和展示。6.3爬虫应用1.importrequests2.frombs4importBeautifulSoup3.defget_university_ranking():4.url="/rankings/bcur/2023"5.try:6.response=requests.get(url)#发送GET请求获取网页内容7.response.raise_for_status()#检查请求是否成功8.html_content=response.content.decode("utf-8")#获取网页内容并解码9.soup=BeautifulSoup(html_content,'html.parser')#解析网页内容10.ranking_table=soup.find('table',class_='rk-table')#找到排名表格6.rows=ranking_table.find_all('tr')#找到所有行数据12.university_rankings=[]#存储大学排名数据的二维列表13.forrowinrows[1:]:#从第2行开始遍历,第1行为表头20【文件6.3】code6_3.py14.cols=row.find_all('td')#找到所有列数据15.university_rank=cols[0].text.strip()#提取大学排名16.university_name=cols[1].text.strip()#提取大学名称17.university_data=[university_rank,university_name]#构建一行数据18.university_rankings.append(university_data)#将数据添加到二维列表19.returnuniversity_rankings20.exceptrequests.exceptions.RequestExceptionase:21.print("网页请求错误:",e)22.returnNone23.if__name__=="__main__":24.university_rankings=get_university_ranking()25.ifuniversity_rankings:26.fordatainuniversity_rankings:27.print(f"排名:{data[0]},大学:{data[1]}")6.3爬虫应用21在上面的代码中,第1~2行导入了requests库和BeautifulSoup库,这两个库是进行网页爬取和内容解析的关键工具。第3~22行定义一个名为get_university_ranking()的函数,用于获取大学排名数据。其中,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某化工厂产品研发流程规范
- 2025-2026学年学前班认识两位数教案
- 2026四上数学因数末尾有零乘法教案
- 2025-2026学年金牌教案心得
- 2025-2026学年体育满分教学设计怎么写
- 2025-2026学年三国麻将教学目标设计
- 某金属厂操作准则
- 2025-2026学年面试快速写教案
- 3.3 唯物辩证法的实质与核心 教学设计-高中政治统编版必修四哲学与文化
- 路基工程量计算书
- 娄底市辅警招聘公安基础知识考试题库及答案
- 《微针治疗操作规范》团体标准(征求意见稿)
- 危险药品运输制度规范
- 2025年湖南事业单位招聘考试(计算机)细选练习试题及答案
- 2026江西吉安市吉水县城控人力资源服务有限公司招聘劳务外包1人备考题库(一)有答案详解
- 加油站改造工程安全文明施工方案
- 数控车床装配流程及工艺标准说明
- 浙江省六校联盟2024-2025学年高二上学期期中联考英语试题英语答案
- 2025年河北机关事业单位工人技能等级考试(公路养护工-技师)试题及答案
- 2025版《煤矿安全规程》解读
- 2025译林版新教材初中英语八年级上册单词表(复习必背)
评论
0/150
提交评论