财经大数据技术应用基础 课件 项目四 数据采集_第1页
财经大数据技术应用基础 课件 项目四 数据采集_第2页
财经大数据技术应用基础 课件 项目四 数据采集_第3页
财经大数据技术应用基础 课件 项目四 数据采集_第4页
财经大数据技术应用基础 课件 项目四 数据采集_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四数据采集项目项目四学习目标知识目标了解文件读写常用方法及函数;熟悉网络爬虫原理及Web前端基础内容;掌握SQLite数据类型与sqlite3模块操作;掌握Requests库与BeautifulSoup模块的使用方法。能力目标能熟练使用Pandas的read_excel()、to_excel()等方法来读取和写入Excel文件;能熟练利用sqlite3模块进行数据库的连接、表的创建以及数据库内容的读取等操作;能利用Requests库、结合for循环以及Pandas的read_excel()等方法,正确完成上市公司财务报表的获取及读取等操作。项目四学习目标素质目标通过本单元学习,让学生领悟数据采集的重要性,引导学生树立系统观念,会用前瞻性思考、全局性谋划、整体性推进的科学思想方法;让学生在体验简单网页爬取和网页数据采集的同时,培养执着专注、精益求精、一丝不苟和追求卓越的工匠精神。项目四思维导图4.1Python读取数据文件文件是存储在辅助存储器上的数据序列,可以包含文本、数字、表格等多种类型的数据。用文件形式组织和表达数据是更有效也更灵活的方式。Python提供了对文件的基本操作,包括打开、读取、写入和关闭文件。4.1.1文件概述4.1Python读取数据文件文件的含义1文件的分类2文本文件二进制文件要打开一个txt文件,可以使用open('file','mode')函数,其中第一个参数输入要读取的文件路径,第二个参数是打开文件模式,文件模式类型如下表4-1所示。4.1.2读写txt文件4.1Python读取数据文件打开txt文件1表4-1open()函数打开文件的模式模式含义r以只读方式打开一个文件,为open()的默认模式。w打开一个文件进行写入。如果文件不存在,则创建新文件;如果文件存在,则覆盖该文件。x执行文件的新建写入,如果文件已存在,则操作失败,并抛出异常。a追加写入模式,如果文件已存在,则在后面追加内容,如果文件不存在,则创建。t文本文件模式,为open()的默认模式。b二进制文件模式。+打开文件进行更新(同时读写),与r、w、a、b一同出现。使用with语句打开文件,在代码块执行完毕后自动关闭文件。采用不同模式打开txt文件,代码示例如下所示。4.1.2读写txt文件4.1Python读取数据文件打开txt文件1行号1234代码行#打开文件

withopen('example.txt','r')asf:#以只读模式打开文件withopen('example.txt','w')asf:#打开文件进行写入#使用了with语句来打开文件,这样可以在代码块执行完毕后自动关闭文件write()用于将单个字符串写入文件writelines()可将一个字符串列表写入文件中,但不会自动换行,换行需要添加换行符\n写入文本文件的操作函数有:写入txt文件24.1Python读取数据文件4.1.2读写txt文件写入txt文件24.1Python读取数据文件4.1.2读写txt文件例4-1代码录入

行号代码行1#

打开文件进行写入

2withopen('example1.txt','w',encoding='utf-8')asf:3#

encoding='utf-8'指定编码方式,防止编码错误4

f.write('我的名字是张三\n')#

写入“我的名字是张三”,\n表示换行5

f.write('我今年20岁\n')

#

写入“我今年20岁”

6

f.write('我喜欢编程')#

写入“我喜欢编程”如何在Python中写入txt文件,代码例4-1、4-2所示。写入txt文件24.1Python读取数据文件4.1.2读写txt文件例4-2代码录入

行号代码行1withopen('example2.txt','w',encoding='utf-8')asf:2lines=['我的名字是张三\n','我今年20岁\n','我喜欢编程\n']3#将一个字符串列表写入文件4f.writelines(lines)读取txt文件内容,通常使用:读取txt文件34.1Python读取数据文件4.1.2读写txt文件read()readline()readlines()读取txt文件3行号1234代码行#打开文件withopen('example1.txt','r',encoding='utf-8')asf:data=f.read()

#读取文本print(data)#输出所有文本内容4.1Python读取数据文件4.1.2读写txt文件

read()函数用于一次性读取整个文件的内容,将文件内容作为一个字符串返回。读取上面创建的example1.txt,代码例4-3所示。读取txt文件3行号1234代码行#打开文件withopen('example1.txt','r',encoding='utf-8')asf:print(f.readline())#读取第一行的内容print(f.readline())

#接着读取第二行的内容4.1Python读取数据文件4.1.2读写txt文件

readline()函数每次只读取文件中的一行内容,并返回这一行作为一个字符串。这对于处理大文件或需要逐行处理文件的场景非常有用。分行读取上面创建的example1.txt,代码例4-4所示。读取txt文件3行号1234代码行#打开文件withopen('example1.txt','r',encoding='utf-8')asf:data=f.readlines()#读取全部内容,以数列的格式返回结果print(data)

#输出所有文本内容4.1Python读取数据文件4.1.2读写txt文件

readlines()函数会一次性读取文件中的所有行,并将它们作为一个列表返回,其中列表的每个元素都是文件中的一行。一般适用于文件内容不是非常大的情况,因为它会将所有行都加载到内存中。读取上面创建的example1.txt,返回一个列表,代码及运行结果例4-5所示。使用Pandas的read_excel读写Excel文件14.1Python读取数据文件4.1.3读写Excel文件

read_excel()是pandas库中用于读取Excel文件的函数,它可以将Excel文件的内容转换为pandas的DataFrame对象,以便于进行数据分析和处理,基本语法(列举常用参数):

pd.read_excel(io

,

sheet_name=0

,

index_col=None)指定读取的Excel文件路径指定要读取的工作表,可以是工作表的名称,默认值为0,表示读取第一个工作表用作行索引的列编号或列名,如果给定,将使用这一列作为返回的DataFrame的行索引

读取名为班级学生信息.xlsx的Excel文件,代码例4-6所示。使用Pandas的read_excel读写Excel文件1行号12345代码行importpandasaspd#读取文件班级学生信息.xlsx的第一个工作表df=pd.read_excel('班级学生信息.xlsx',sheet_name=0)#输出内容print(df)4.1Python读取数据文件4.1.3读写Excel文件

to_excel()函数用于将DataFrame中的数据写入Excel文件。基本语法(列举常用参数):使用Pandas的to_excel写入Excel文件24.1Python读取数据文件4.1.3读写Excel文件df.to_excel(excel_writer

,

sheet_name='Sheet1'

,

index=True

,

header=True)指定工作表的名称,默认为'Sheet1'代表是否将DataFrame的行索引写入Excel文件,默认为True代表是否将DataFrame的列名写入Excel文件,默认为True指定要写入的文件路径JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集。由于其文本格式独立于编程语言,JSON已成为许多类型的应用程序之间传输数据的一种标准方法。JSON文件通常以.json为文件扩展名。4.1.3读写JSON文件4.1Python读取数据文件使用json.dump()函数,将数据写入JSON文件。4.1.3读写JSON文件写入JSON文件14.1Python读取数据文件json.dump(data,file,indent=4)将data编码成JSON格式并写入到file中是一个可选参数,用于美化输出,使JSON文件易于阅读使用json.load()函数,从JSON文件中读取数据。读取例4-9写入的JSON文件,代码例4-10所示。4.1.3读写JSON文件读取JSON文件24.1Python读取数据文件行号代码行1importjson2#打开之前写入的financial_data.json文件,'r'表示只读模式3withopen('financial_data.json','r')asf:4#调用json.load()方法从文件中读取JSON数据,并将其存储在data变量中5data=json.load(f)6#输出数据以验证其正确性7print(data)8#data现在是一个Python字典4.2Python读写SQLite数据库SQLite是轻量级的、磁盘上的数据库,不需要独立的服务器进程,并允许访问其数据库通过包含在大多数编程语言中的库。它是一个开源的、零配置、自给自足的、事务性的SQL数据库实现,特别适用于嵌入式系统、移动设备、桌面应用程序和中小型项目。4.2.1SQLite概述4.2Python读写SQLite数据库4.2.1SQLite概述SQLite主要特点14.2Python读写SQLite数据库自包含无需配置跨平台小型事务性的4.2.1SQLite概述数据库交互的基本操作24.2Python读写SQLite数据库开始建立连接创建游标对象执行SQL语句关闭游标关闭数据库连接结束Python的sqlite3模块是一个提供了轻量级磁盘上SQL数据库的接口,使得Python开发者能够方便地创建、查询和管理SQLite数据库。下面是sqlite3模块中一些常用的API函数:4.2.1SQLite概述Pythonsqlite3模块的常用API34.2Python读写SQLite数据库函数描述sqlite3.connect(database[,timeout,otheroptionalarguments])连接到SQLite数据库,如果数据库文件不存在,将会被创建。connection.cursor([cursorClass])创建游标对象,游标(Cursor)对象允许你发送SQL语句到数据库cursor.execute(sql[,parameters])执行SQL语句mit()提交当前事务。如果你不调用这个方法,那么从上一次调用commit()方法以来所做的任何更改都不会被保存到数据库。cursor.close()关闭游标对象connection.close()关闭连接为了使用sqlite3模块,首先必须创建一个表示数据库的连接对象,然后可以有选择地创建游标对象,这将帮助执行所有的SQL语句。建立连接并创建游标对象使用的函数:4.2.2连接数据库4.2Python读写SQLite数据库sqlite3.connect(database[,timeout,otheroptionalarguments])将data编码成JSON格式并写入到file中是一个可选参数,表示连接等待锁定的持续时间,直到发生异常断开连接,默认5.0其他参数都是可选的,用于控制连接的各个方面现在要在sqlite3模块下连接test.db数据文件,并创建游标对象,最后输出连接数据库。使用的代码命令如例4-11所示。4.2.2连接数据库4.2Python读写SQLite数据库行号代码行1#导入sqlite3模块2importsqlite33#连接到数据库,数据库文件是test.db4#如果数据库不存在,将会创建一个新的数据库对象5conn=sqlite3.connect('test.db')6#创建一个游标对象,使用它来执行SQL命令7c=conn.cursor()8print(‘连接数据库’)connection.cursor([cursorClass])用于创建一个游标(cursor)对象,该对象可以用来执行SQL语句并获取查询结果。4.2.2连接数据库4.2Python读写SQLite数据库connection.cursor([cursorClass])是一个可选参数,允许指定一个自定义的cursor类,但通常你可以省略这个参数,从而得到一个标准的cursor对象SQLite中新建表格的操作是数据库设计的基础部分,它允许在数据库中定义一个结构化的数据存储容器,即表格(Table)。每个表格由多个列(Columns)构成,这些列定义了表格可以存储的数据类型。使用CREATETABLE语句创建表格语法如下所示:4.2.3编写表格4.2Python读写SQLite数据库创建表格1行号代码行1CREATETABLEtable_name(2column1datatypePRIMARYKEY,3column2datatypeNOTNULL,4column3datatypeDEFAULT0,5...6columnNdatatype,);现创建一个表格名为COMPANY,包含ID、NAME、AGE、ADDRESS、SALARY五列。使用的代码命令与结果如例4-12所示:4.2.3编写表格4.2Python读写SQLite数据库创建表格1行号代码行1importsqlite32conn=sqlite3.connect('test.db')3print("数据库打开成功")4#创建光标对象5c=conn.cursor()6#创建一个表:COMPANY,c.execute是PYthon中用于执行SQL语句的方法,'''用来定义多行字符串7c.execute('''CREATETABLECOMPANY8(IDINTPRIMARYKEYNOTNULL,9NAMETEXTNOTNULL,4.2.3编写表格4.2Python读写SQLite数据库创建表格110AGEINTNOTNULL,11ADDRESSCHAR(50),12SALARYREAL);''')13print("数据表创建成功")14#提交事务:15mit()16#关闭连接:17conn.close()创建表格之后,可以使用INSERTINTO语句来插入数据。以下是INSERTINTO语句的几种基本用法:4.2.3编写表格4.2Python读写SQLite数据库用作行索引的列编号或列名,如果给定,将使用这一列作为返回的DataFrame的行索引插入数据2第一种语法方式如下:行号代码行1INSERTINTOtable_name(column1,column2,column3,...)2VALUES(value1,value2,value3,...);3#在这里,column1,column2,...columnN是要插入数据的表中的列的名称。第二种语法方式如下:行号代码行1INSERTINTOTABLE_NAMEVALUES(value1,value2,value3,...valueN);现将员工信息使用sqlite3模块插入数据到SQLite数据库中,代码例4-13所示。4.2.3编写表格4.2Python读写SQLite数据库插入数据2行号代码行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("数据库打开成功")5c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\6VALUES(1,'Paul',32,'California',20000.00)")7c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\8VALUES(2,'Allen',25,'Texas',15000.00)")现将员工信息使用sqlite3模块插入数据到SQLite数据库中,代码例4-13所示。4.2.3编写表格4.2Python读写SQLite数据库插入数据2行号代码行9c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\10VALUES(3,'Teddy',23,'Norway',20000.00)")11c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\12VALUES(4,'Mark',25,'Rich-Mond',65000.00)")13#提交事务到数据库14mit()15print("数据插入成功")16#最后关闭数据库连接17conn.close()通过pandas中的read_sql读取数据库内容,代码例4-14所示。4.2.3编写表格4.2Python读写SQLite数据库插入数据2行号代码行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6df通过pandas中的read_sql读取数据库内容,代码例4-14所示。4.2.3编写表格4.2Python读写SQLite数据库插入数据3行号代码行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6df在SQLite中读取数据通常涉及使用SELECT语句来查询数据库中的表,并获取满足特定条件的数据行。SELECT语句的基本语法如下:4.2.4读取数据4.2Python读写SQLite数据库行号代码行1SELECTcolumn1,column2,...2FROMtable_name3WHEREcondition4ORDERBYcolumnASC/DESCSELECT:指定要检索的列。使用星号(*)可以选择所有列。FROM:指定要查询数据的表名。WHERE:(可选)指定选择条件。如果省略,将返回表中的所有行。ORDERBY:(可选)指定结果的排序方式。可以按一个或多个列进行排序,并指定排序的方向:升序(ASC)或降序(DESC)。下面的例4-15显示了如何从前面创建的表中获取并显示记录。4.2.4读取数据4.2Python读写SQLite数据库行号代码行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("数据库打开成功")5cursor=c.execute("SELECTid,name,address,salaryfromCOMPANY")6forrowincursor:7print("ID=",row[0])8print("NAME=",row[1])9print("ADDRESS=",row[2])10print("SALARY=",row[3])11print("\n")12print("数据操作成功")13conn.close()在SQLite中修改表中的数据,主要是通过使用UPDATE语句来完成的。UPDATE语句可以让你更改表中一行或多行的一个或多个列的值。使用UPDATE语句修改表格记录语法如下所示:4.2.5数据修改4.2Python读写SQLite数据库行号代码行1UPDATEtable_name2SETcolumn1=value1,column2=value2,...3WHEREcondition;table_name是要更新数据的表名SET关键字后跟着列名和新值。你可以一次更新多个列WHERE子句是可选的,用于指定哪些记录需要被更新。如果省略WHERE子句,表中的所有记录都将被更新。例如:使用UPDATE语句将员工Paul的工资修改为25000,代码例4-16所示。4.2.5数据修改4.2Python读写SQLite数据库行号代码行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("数据库打开成功")5#将员工Paul的工资修改为250006c.execute("UPDATECOMPANYsetSALARY=25000.00whereNAME='Paul';")7mit()8print("数据操作成功")9conn.close()通过pandas读取数据库文件,代码如下。4.2.5数据修改4.2Python读写SQLite数据库行号代码行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6dfSQLite的DELETE语句用于从数据库表中删除行。这个操作可以使用带有WHERE子句的DELETE来删除选定行,否则所有的记录都会被删除。使用时要小心,因为一旦执行了DELETE操作,被删除的数据就不能恢复了。基本的DELETE语法如下:4.2.6数据删除4.2Python读写SQLite数据库行号代码行1DELETEFROMtable_name2WHERE[condition];table_name是想要删除数据的表名condition指定哪些行将被删除的条件。如果省略该条件,表中的所有行都将被删除。现将上面创建的COMPANY表使用DELETE语句删除名字为Paul的记录,然后获取并显示剩余的记录,代码例4-18所示。4.2.6数据删除4.2Python读写SQLite数据库行号代码行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("数据库打开成功")5#删除名字为Paul这条记录6c.execute("DELETEfromCOMPANYwhereNAME='Paul';")7mit()8#查询删除信息后表中的数据9cursor=conn.execute("SELECTid,name,address,salaryfromCOMPANY")10forrowincursor:11print("ID=",row[0])12print("NAME=",row[1])13print("ADDRESS=",row[2])14print("SALARY=",row[3])15print("\n")16print("数据操作成功")17conn.close()通过pandas读取数据库文件,代码如下:4.2.6数据删除4.2Python读写SQLite数据库行号代码行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6df4.3网页数据采集4.3.1网络爬虫4.3网页数据采集

网络爬虫也称作网络蜘蛛(Spider)、网页机器人,是一种按照一定的规则从网页中提取信息的程序或脚本。网络爬虫广泛应用于搜索引擎、数据分析、在线价格监测、网站数据备份等领域。4.3.1网络爬虫4.3网页数据采集网络爬虫的分类1通用网络爬虫聚焦网络爬虫增量式网络爬虫深层网络爬虫4.3.1网络爬虫4.3网页数据采集网络爬虫的一般工作流程2确定目标页面抓取数据提取数据存储4.3.1网络爬虫4.3网页数据采集网络爬虫的规范31.合法性2.道德性3.透明性4.安全性5.隐私保护6.版权意识4.3.1网络爬虫4.3网页数据采集URL4URL即统一资源定位符,是互联网上的资源地址,用于标识和定位这些资源,无论是网页、图片还是视频等。简单来说,就是我们在浏览器地址栏中输入的那一串字符,它就像是互联网上的“门牌号”或“地址”。通过这个地址,我们可以找到并访问互联网上的各种资源。4.3.2Web前端基础4.3网页数据采集4.3.2Web前端基础4.3网页数据采集HTML1HTML即超文本标记语言,是用于创建网页的标准标记语言。它的设计目的是让文档具有结构化标记和文本链接,使其具有跨平台的可交互性和可读性。4.3.2Web前端基础4.3网页数据采集用作行索引的列编号或列名,如果给定,将使用这一列作为返回的DataFrame的行索引HTML1HTML文档由元素构成,这些元素基于它们的标签类型,对内容进行了不同的描述和组织。常用HTML标签如下表所示:标签含义<!DOCTYPEhtml>声明为HTML5文档<html>根元素,包裹整个HTML文档<body>包含所有显示在浏览器中的内容,如文本、图片、链接等<head>包含文档的元数据<h1>、<h2>、<h3>…标题,<h1>是最高级标题<p>段落标签<ahref="...">链接标签<ul>、<ol>、<li>列表标签,<ul>用于创建无序列表,<ol>用于创建有序列表,<li>表示列表项<table>表格<imgsrc="..."alt="...">图像标签,用于嵌入图片4.3.2Web前端基础4.3网页数据采集用作行索引的列编号或列名,如果给定,将使用这一列作为返回的DataFrame的行索引下面是一个基础的HTML网页结构,代码例4-20所示。在文本中将下列HTML文档写入并保存,文件命名:我的简单网页.html。打开文件结果如下所示。行号代码行1<!DOCTYPEhtml>2<html>3<head>4<title>我的简单网页</title>5</head>6<body>7<h1>欢迎来到我的网页</h1>8<p>这是一个HTML示例。</p>9<ahref="">点击这里访问</a>10<br>11<h2>我的兴趣爱好</h2>12<ul>13<li>阅读</li>14<li>编程</li>15<li>旅行</li>16</ul>17</body>18</html>4.3.2Web前端基础4.3网页数据采集用作行索引的列编号或列名,如果给定,将使用这一列作为返回的DataFrame的行索引CSS2CSS(层叠样式表,CascadingStyleSheets)是一种用于描述HTML或XML文档的外观和格式的样式表语言。4.3.2Web前端基础4.3网页数据采集CSS21.引入CSS(1)内联样式CSS代码直接写在现有的HTML标记中,直接使用style属性改变样式。现将<p>标签中的文本“这是一段红色文字。”设置为红色,如下所示。行号代码行1<pstyle="color:red;">这是一段红色文字。</p>4.3.2Web前端基础4.3网页数据采集用作行索引的列编号或列名,如果给定,将使用这一列作为返回的DataFrame的行索引CSS21.引入CSS(2)内部样式表在HTML的<head>标签内使用<style>标签定义样式,适用于单个文档的样式定义。现将整个<body>元素的背景颜色设置为淡蓝色(lightblue),如下所示。行号代码行1<style>2body{3background-color:lightblue;4}5</style>4.3.2Web前端基础4.3网页数据采集CSS21.引入CSS(3)外部样式表将CSS写在外部文件中,然后通过HTML的<link>标签引入。这是最常用且推荐的方式,因为它可以在多个页面间共享CSS。<link>是一个HTML元素,专门用于在HTML文档中链接到外部的CSS样式表文件。行号代码行1<linkrel="stylesheet"href="styles.css">4.3.2Web前端基础4.3网页数据采集CSS22.CSS语法CSS规则集包含了一个选择器和一个声明块。选择器指向HTML文档中要样式化的元素。声明块包含一个或多个声明,每个声明由一个属性和一个值组成,用冒号分隔,整个声明块用大括号包裹,语法结构如下所示。行号代码行1selector{2property:value;3}4.3.2Web前端基础4.3网页数据采集CSS23.选择器选择器(CSSSelectors)是CSS中用于选择并样式化HTML元素的部分。CSS选择器有12多种类型,每种都有其特定的用途和语法。下面列举一些常见的CSS选择器类型:4.3.2Web前端基础4.3网页数据采集CSS23.选择器(1)元素选择器

它基于HTML元素的名称来选择元素,如p、div。例如,选择页面上的所有<p>元素,并将它们的文本颜色设置为蓝色,如下所示。1代码行1p{2color:blue;3}4.3.2Web前端基础4.3网页数据采集CSS23.选择器(2)ID选择器

它使用HTML元素的id属性来选择单个元素,以#开头,后跟ID名。例如,#myID选择id属性为“myID”的元素,如下所示。行号代码行1#myID{2font-size:20px;3}4.3.2Web前端基础4.3网页数据采集CSS23.选择器(3)类选择器

它使用HTML元素的class属性来选择元素。类选择器以点(.)开头。例如,.myClass选择所有class属性为“myClass”的元素,如下所示。行号代码行1.myClass{2background-color:yellow;3}4.3.2Web前端基础4.3网页数据采集CSS23.选择器(4)属性选择器

它选择具有指定属性和值的HTML元素。例如,[type="text"]选择所有type属性为“text”的输入元素,如下所示。行号代码行1[type="text"]{2border:1pxsolidblack;3}4.3.2Web前端基础4.3网页数据采集CSS24.CSS属性4.3.2Web前端基础4.3网页数据采集CSS2接下来我们将上面创建的:我的简单网页.html使用CSS进行修饰和美化,代码例4-21所示。4.3.2Web前端基础4.3网页数据采集XPath(XMLPathLanguage)是一种在XML文档中查找信息的语言。网络爬虫中,经常使用XPath来提取网页中的信息。XPath通过路径表达式来选择节点,这些表达式可以从文档的根节点开始,也可以从任意节点开始。4.3.2Web前端基础4.3网页数据采集XPath3XPath节点(1)元素(2)属性(3)文本(4)命名空间(5)处理指令(6)注释(7)文档(根)节点,树的根被称为文档节点或者根节点。4.3.2Web前端基础4.3网页数据采集XPath节点行号代码行1<?xmlversion="1.0"encoding="ISO-8859-1"?>2<CATALOG>3<PLANT>4<COMMON>Bloodroot</COMMON>5<BOTANICALlang="en">Sanguinariacanadensis</BOTANICAL>6<ZONE>4</ZONE>7<LIGHT>MostlyShady</LIGHT>8<PRICE>$2.44</PRICE>9<AVAILABILITY>031599</AVAILABILITY>10</PLANT>11</CATALOG>父节点:PLANT元素子节点:COMMON、BOTANICAL、ZONE、LIGHT、PRICE、AVAILABILITY元素父的父节点:CATALOG元素4.3.2Web前端基础4.3网页数据采集XPath语法XPath使用路径表达式来选取XML文档中的节点或节点集。表4-5节点选取常用的路径表达式路径表达式效果CATALOG选取CATALOG元素的所有子节点/CATALOG选取根元素CATALOGCATALOG/PLANT选取属于CATALOG的子元素的所有PLANT元素//PLANT选取所有PLANT子元素,而不管他们在文档中的位置CATALOG//PLANT选择属于CATALOG元素的后代的所有PLANT元素,而不管他们位于CATALOG之下的什么位置//@lang选取名为lang的所有属性4.3.3Requests库4.3网页数据采集Requests库是一个基于Python语言编写的,用于发送HTTP请求的第三方库。Requests库支持非常丰富的链接访问功能。4.3.3Requests库4.3网页数据采集Requests模块可以支持HTTP协议中的全部请求方式,HTTP常用请求方式有GET、POST、PUT、DELETE、HEAD、OPTION,其中以GET请求最为常用,函数如下所示:4.3.3Requests库4.3网页数据采集下面编写一个简单的Python脚本来发送一个GET请求到百度的首页,并打印出获取到的HTML内容,代码例4-24所示。行号代码行1importrequests2#百度首页的URL3url=''4#发送GET请求5response=requests.get(url)6#检查请求是否成功7ifresponse.status_code==200:8#打印网页的HTML内容,以字符串形式输出,以前500个字符作为示例9print(response.text[:500])10else:11print(f"Error:Unabletofetchwebpage,statuscode{response.status_code}")4.3.4BeautifulSoup模块4.3网页数据采集安装BeautifulSoup1BeautifulSoup模块是第三方模块(BeautifulSoup4是最新版本),需要额外进行安装,一般有两种安装方式:1.使用pip进行安装,安装命令为:pipinstallbeautifulsoup42.可以通过下载源码的方式进行安装,下载链接是:/pypi/beautifulsoup4/。运行下面命令即可完成安装:pythonsetupinstall。4.3.4BeautifulSoup模块4.3网页数据采集创建BeautifulSoup对象2

首先导入BeautifulSoup模块,并指定一个解析器。然后,你可以使用BeautifulSoup类来解析HTML或XML文档。常用的函数为:BeautifulSoup(html,’lxml’)BeautifulSoup(html,’html.parser’)html代表要解析的网页源代码html.parser、lxml分别代表不同的解析器以百度网页HTML源代码示例,进行创建BeautifulSoup对象的基本解析操作,使用的代码及运行结果如例4-26所示。4.3.4BeautifulSoup模块4.3网页数据采集BeautifulSoup对象种类3TagNavigableStringBeautifulSoupComment4.3.4BeautifulSoup模块4.3网页数据采集BeautifulSoup对象种类3以例4-26中百度网页HTML源代码示例,使用它们来获取标签的名称、属性、内容等信息,代码及运行结果如例4-27所示。运行结果<ahref="">百度新闻</a>None<title>百度一下,你就知道</title>{'href':''}百度新闻4.3.4BeautifulSoup模块4.3网页数据采集搜索文档树4(1)访问元素的内容和属性

创建BeautifulSoup对象后,如何轻松提取我们需要的信息,BeautifulSoup定义了很多搜索方法,find_all()和find()是最常用的两个:find_all(name,attrs,recursive,string,limit,**kwargs)find(name,attrs,recursive,string,**kwargs)4.3.4BeautifulSoup模块4.3网页数据采集搜索文档树4(2)其他搜索函数函数功能find_parents()find_parent()find_parents和find_parent函数用来搜索当前节点的父节点。两者的区别是:find_parents返回所有符合条件的父节点:find_parent只返回匹配的第一个。find_next_siblings

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论