版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章
爬虫数据的存储学习目标知识目标(1)了解爬虫数据的多种存储方式。(2)掌握JSON数据格式的基础知识和使用方法。(3)熟悉MongoDB数据库的安装、使用与数据存储操作。(4)学习MySQL数据库的安装和数据存储操作。(5)了解数据库可视化工具Navicat的基本使用方法。(6)掌握Python与各类数据库的连接和存储操作。学习目标能力目标(1)能够将爬虫采集的数据保存为JSON文件。(2)具备将爬虫数据存储到MongoDB数据库的能力。(3)能将爬虫数据存储至MySQL数据库,实现数据的持久化管理。(4)运用Navicat进行图形化的数据库管理。(5)能够设计并实现综合数据采集与存储的爬虫项目。学习目标素质目标(1)增强存储与处理的能力。(2)培养严谨的爬虫程序编写思维和数据管理意识。(3)提高解决实际数据采集问题的能力和综合数据操作技能。(4)感受数据科学的应用魅力,提升自我学习和探索的兴趣。思维导图章节内容行业PPT模板/hangye/5.25.35.4存储至JSON文件存储至MongoDB数据库存储至MySQL数据库5.1爬虫数据的存储方式5.5拓展案例—采集贴吧信息PATR5.1爬虫数据的存储方式文本文件文本文件是一种简单也是常见的数据存储方式之一,如CSV或JSON。这种方式适用于数据量较小、结构简单的场景。CSV文件适合表格形式的数据存储,而JSON文件则适合存储层次结构复杂的数据。NoSQL数据库NoSQL数据库,如MongoDB、Cassandra等可应对大规模数据且数据结构不固定的数据采集场景。其能够有效处理半结构化或非结构化数据,满足数据多样性与动态变化的存储需求。关系型数据库关系型数据库如MySQL、PostgreSQL适用于结构化数据及数据规模较大的数据采集应用场景。关系型数据库支持复杂查询语句,并且可以保证数据的完整性和一致性。分布式存储系统对于极大规模的数据,分布式存储系统如HadoopHDFS、ApacheHive可以提供高效的数据存储与处理能力。01030204爬虫数据的存储方式5.1PATR5.2存储至JSON文件JSON是一种轻量级的数据交换格式,易于人的阅读和编写,同时也易于机器的解析和生成。JSON使用完全独立于编程语言的文本格式,它是数据交换的理想语言。JSON格式与Python中的字典相似。常见的语法规则如下。(1)对象(Object):一个对象是一个无序的键/值对集合。对象用花括号包裹着,键与值之间用冒号‘:’分隔,多个键值对之间用逗号‘,’分隔。(2)数组(Array):一个数组是值的有序集合。数组用方括号包裹着,值之间用逗号‘,’分隔。(3)值(Value):值可以是一个字符串、数字、对象、数组、布尔值或null。(4)字符串(String):字符串是由双引号括起来的一系列字符。字符串可以包含转义字符。(5)数字(Number):数字可以是整数或浮点数,并且没有任何引号。JSON简介与语法5.2.1【例5-1】JSON语法规则的使用1. data={2. "name":"Keeki",3. "age":36,4. "is_teacher":True,5. "courses":["Math","Science"],6. "address":{7. "city":"NewYork",8. "zipcode":"10001"9. }10. }JSON简介与语法5.2.1上述例5-1中,name是字符串,age是数字,is_student是布尔值,courses是字符串数组,而address是一个对象。JSON库的使用Python提供了内置的json模块来处理JSON数据。这个模块提供了如下四个方法:dump(),dumps(),load()和loads(),分别用于将Python对象转换为JSON字符串、JSON字符串转换为Python对象,以及从文件读写JSON数据。1.json.dumps()方法json.dumps()方法用于将dict类型的数据转成JSON格式的str,如果直接将dict类型的数据写入JSON文件中会发生报错,因此在将数据写入JSON文件时需要用到该函数。
2.json.loads()方法json.loads()方法用于将JSON文本字符串转换为Python对象中的dict,因为如果爬虫解码后得到的是网页的字符串,如果不转换成Python类型的数据,则无法进行数据提取。5.2.2JSON库的使用3.json.dump()方法将数据存储为JSON文件的过程为一个编码过程,编码过程常用dump()方法,将Python对象转换为JSON对象,并通过fp文件流将JSON对象写入文件内。json.dump()方法有两个参数,没有返回值,常与“w”连用,用于将dict类型的数据转成str,并写入JSON文件中。它在底层完成两件事,一件事是将对象/列表转换为字符串,第二件事是将转换后的数据写入文件中。dump()方法的语法格式如下:json.dump(obj,fp,skipkeys=False,ensure_ascii=False,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,encoding='utf-8',default=None,sort_keys=False,**kw)5.2.2JSON库的使用4.json.load()方法json.load()方法用于从JSON文件中读取数据,常与"r"连用,该方法可以用来读取与输出文件中的内容。【例5-2】将“例5-1”中的data保存到JSON文件中。5.2.21. importjson2. json_str=json.dumps(data,indent=4)#将Python对象转换为JSON字符串3. print(json_str)4. withopen('data.json','w')asfile:#将Python对象写入JSON文件5. json.dump(data,file,indent=4)JSON库的使用【例5-3】读取JSON文件中的内容并转为Python对象。5.2.21. importjson2. 3. #从JSON文件中读取数据4. withopen('data.json','r')asfile:5. data_from_file=json.load(file)6. #输出从文件中读取的数据7. print(data_from_file)综合案例—采集交通数据1.数据采集需求采集如图5-2所示的交通主页上的交通数据,采集的字段信息包括time、citycode、cityname、index、last_index、index_level、speed、city_coords、provincecode、provincename,并将采集到的交通数据存储到“jiaotong.json”文件。5.2.3综合案例—采集交通数据2.采集思路分析(1)打开如图5-2所示的交通主页,可以看到需要采集的交通数据。(2)从图5-2所示的交通数据,用户可以看到这些数据属于JSON格式,因此可以使用JSON库中的loads()、dump()和dumps()等方法将交通数据加载到本地并写入JSON文件中。3.采集代码实现(1)在PyCharm中,右击“Chapter5Code”的包,在快捷菜单中选择New->PythonFile命令,新建一个名称为“综合案例—采集交通数据”的Python文件。(2)在“综合案例—采集交通数据”Python文件中输入采集交通数据的爬虫代码,如图5-3所示。5.2.3综合案例—采集交通数据5.2.3(3)单击工具栏上的运行按钮,运行采集交通数据的爬虫代码,当在底部“Run”窗口中显示爬虫程序运行结束,在左侧项目结构区的当前工程目录Chapter5code中的tmp目录下,可以看到存储有交通数据的文件“jiaotong1.csv”和“jiaotong2.csv”。PATR5.3存储至MongoDB数据库MongoDB数据库MongoDB是一种NoSQL数据库,非常适合存储结构灵活、不确定的数据类型。相比传统的关系型数据库,MongoDB能更好地处理海量数据和复杂查询。本节将从MongoDB的安装开始,逐步讲解如何使用Navicat进行可视化的数据库管理,最后介绍如何在Python爬虫项目中使用MongoDB存储数据。5.3MongoDB数据库的安装安装MongoDB数据库的步骤如下。(1)打开MongoDB官网(/try/download/community)。(2)选择适合操作系统的版本并下载MongoDB社区版(CommunityServer),如图5-4所示。5.3.1(3)运行下载的MongoDB安装文件,按照安装程序的指示进行安装。在安装过程中,设置安装路径,如图5-5所示。MongoDB数据库的安装5.3.1可以在图5-5中勾选“InstallMongoDBasaService”选项,以便MongoDB在系统启动时自动启动。(4)安装完成后,自动启动连接MongoDB数据库服务,如图5-6所示。为了能在命令行中直接运行MongoDB命令,安装完MongoDB,可以将MongoDB的bin目录添加到系统的环境变量中。MongoDB数据库的安装5.3.15.3.2Navicat是一款强大的数据库可视化管理工具,支持多种数据库类型,如MongoDB、MySQL、SQLServer、Oracle等。使用Navicat可以更加直观地管理MongoDB数据库。1.Navicat的安装(1)打开Navicat官网(/en/download/navicat-for-mongodb),选择和下载适合操作系统的NavicatforMongoDB版本,例如此处选择“Navicat17forMongoDB”,如图5-7所示。Navicat的安装与使用5.3.2(2)安装步骤比较简单,按照安装向导指引逐步操作即可完成。(3)安装完成后,启动Navicat,单击“Connection”按钮,然后选择“MongoDB”。(4)在弹出的连接设置窗口中,按下列步骤填写MongoDB的连接信息。1)ConnectionName:自定义连接名称。2)Host:本地连接填写localhost。3)Port:默认端口27017。4)Authentication:若无用户认证,保持空白;若有认证,填写用户和密码。(5)配置完成后,单击“TestConnection”测试连接是否成功,若成功则单击OK按钮保存连接,如图5-8所示。Navicat的安装与使用5.3.22.Navicat的使用
创建数据库和集合:在左侧导航树上右击连接名称“ConnMongoDB”,可以创建新的数据库和集合,如图5-9所示。
(a)新建数据库
(b)新建集合Navicat的安装与使用5.3.3首先,安装用于连接和操作MongoDB的Python驱动程序,即pymongo库。1.安装pymongo库安装并配置MongoDB后,即可安装pymongo库。打开命令行或在PyCharm设置窗口,输入以下命令安装pymongo库。
pipinstallpymongo2.连接MongoDB在Python脚本中,首先建立MongoDB的连接,并选择使用的数据库和集合(collection)。MongoDB数据库的使用5.3.3【例5-4】使用Python连接MongoDB。MongoDB数据库的使用1. frompymongoimportMongoClient2. 3. #连接到MongoDB服务器4. client=MongoClient('localhost',27017)5. #选择数据库(若数据库不存在则自动创建)6. mydb=client['myMongoDB']7. #选择集合(若集合不存在则自动创建)8. collection=db['student']5.3.33.插入数据通过insert_one()方法可以向集合中插入单条数据,而insert_many()方法可以插入多条数据。【例5-5】分别使用insert_one()和insert_many()方法向集合student插入单条记录和多条记录。MongoDB数据库的使用1. frompymongoimportMongoClient2. 3. client=MongoClient('localhost',27017)#连接到MongoDB服务器4. db=client['mydb']#选择数据库(若数据库不存在则自动创建)5. collection=db['student']#选择集合(若集合不存在则自动创建)6. #单条数据插入7. data={8. "name":"Alice",9. "age":30,10. "is_student":False,11. "courses":["Math","Science"],12. "address":{13. "city":"NewYork",14. "zipcode":"10001"15. }16. }17. collection.insert_one(data)18. #多条数据插入19. data_list=[20. {21. "name":"Bob",22. "age":25,23. "is_student":True,24. "courses":["English","History"],25. "address":{26. "city":"SanFrancisco",27. "zipcode":"94107"28. }29. },30. {31. "name":"Charlie",32. "age":28,33. "is_student":False,34. "courses":["Physics","Chemistry"],35. "address":{36. "city":"LosAngeles",37. "zipcode":"90001"38. }39. }40. ]41. collection.insert_many(data_list)5.3.34.查询数据使用find()方法可以检索MongoDB集合中的数据。【例5-6】查询student集合中所有记录和年龄大于25岁的记录。MongoDB数据库的使用1. frompymongoimportMongoClient2. 3. client=MongoClient('localhost',27017)#连接到MongoDB服务器4. db=client['mydb']#选择数据库(若数据库不存在则自动创建)5. collection=db['student']#选择集合(若集合不存在则自动创建)6. #查询集合中所有数据7. print('查询集合中所有数据:')8. fordocumentincollection.find():9. print(document)10. #条件查询11. print('条件查询:')12. fordocumentincollection.find({"age":{"$gt":25}}):#$gt是大于操作符的缩写13. print(document)5.3.35.更新数据使用update_one()和update_many()方法可以更新集合中的数据。6.删除数据使用delete_one()和delete_many()方法删除集合中的数据。【例5-7】更新和删除student集合中的数据。MongoDB数据库的使用5.3.3MongoDB数据库的使用1. frompymongoimportMongoClient2. 3. client=MongoClient('localhost',27017)#连接到MongoDB服务器4. db=client['mydb']#选择数据库(若数据库不存在则自动创建)5. collection=db['student']#选择集合(若集合不存在则自动创建)6. #(1)更新单条数据7. collection.update_one(8. {"name":"Alice"},9. {"$set":{"is_student":True}}10. )11. #(2)更新多条数据12. collection.update_many(13. {"is_student":False},14. {"$set":{"is_student":True}}15. )16. #(3)删除单条数据17. collection.delete_one({"name":"Bob"})18. #(4)删除多条数据19. collection.delete_many({"is_student":True})5.3.41.数据采集需求本案例采集“有路网”中书名含有“艺术”关键字的二手书信息,采集的字段包括书名、定价、旧书价、节约价格、作者、出版社、书本ISBN号、出版日期、页数和简介,如图5-11所示。采集二手书信息保存到MongoDB服务器的“mydb”数据库中的“oldBook”集合中。
综合案例—采集二手书信息5.3.42.采集思路分析(1)打开有路网主页(网址详见前言二维码),在搜索框中输入“艺术”,则显示图5-11所示包含“艺术”关键字的二手书信息。(2)通过手动翻页二手书信息,以下为前3个主页的网址,观察翻页的url可以发现网址中的“pageIndex=?”决定了该网页是第几个主页,由此只需修改“pageIndex={}”里面的数字,则可以构建爬虫地址列表。(3)从图5-11可知,在主页上即可采集到图书的10个字段信息。同时在开发者工具的“Elements”面板中可以查看到需要采集的图书信息在li标签中,如图5-12所示。综合案例—采集二手书信息5.3.43.采集代码实现(1)在PyCharm中,右击“Chapter5Code”的包,在快捷菜单中选择New->PythonFile命令,新建一个名称为“综合案例—采集有路网二手书信息”的Python文件。(2)在“综合案例—采集有路网二手书信息”Python文件中输入采集含有“艺术”关键字的二手书信息的爬虫代码,如图5-13所示。(3)单击工具栏上的“”按钮,运行采集有路网二手书爬虫代码,读者可以在底部“Run”窗口中看到如图5-14所示的运行结果,也可以通过Navicat连接mongoDB服务,查看“mydb”数据库中“oldBook”集合中存储的二手书信息,如图5-15所示。综合案例—采集二手书信息5.3.4综合案例—采集有路网二手书信息源代码综合案例—采集二手书信息5.3.4运行结果综合案例—采集二手书信息PATR5.3存储至MySQL数据库MySQL的下载与安装下载并安装MySQL(1)
前往MySQL官方网站的下载页面/downloads/installer/。(2)下载适用于Windows系统的MySQLInstaller,如图5-16所示。5.4.1MySQL的下载与安装(3)打开安装文件,按照提示进行安装。选择“Custom”安装类型,以便自定义安装组件。(4)在安装组件选择页面,可以选择以下几个核心组件:MySQLServer、MySQLWorkbench和MySQLShell,如图5-17所示。5.4.1MySQL的下载与安装(5)按指示逐步安装MySQL,直至安装完成。
在安装过程中,设置MySQL服务器的root用户密码,并配置MySQL服务器信息。在安装完成后,MySQL服务器将会作为Windows服务自动启动。
将MySQL的bin目录路径“C:\ProgramFiles\MySQL\MySQLServer8.0\bin”添加到系统环境变量的“Path变量”中,以便在命令行中直接使用mysql命令。
启动MySQL服务器,打开命令行窗口,输入以下命令连接到MySQL数据库:
mysql-uroot-p5.4.1MySQL数据库的操作1.创建与选择数据库连接MySQL服务器,输入如下命令即可以创建名称为“mysqlDB”数据库并选择该数据库。CREATEDATABASEmysqlDB;USEmysqlDB;5.4.2MySQL数据库的操作2.创建表使用CREATETABLE命令可以创建表,例如输入如图5-18所示的命令即可以在mysqlDB数据库创建users表。5.4.2MySQL数据库的操作3.插入与查询数据使用INSERTINTO命令可以向表中插入数据,而使用SELECT*FROM命令可以查询表中的数据。例如输入图5-19所示的命令向users表插入两条记录,并查看所插入的数据。5.4.2MySQL数据库的使用Python提供了mysql-connector-python库,用于连接和操作MySQL数据库。下面将介绍如何使用Python与MySQL进行数据交互。1.安装mysql-connector-python库使用如下命令安装mysql-connector-python:pipinstallmysql-connector-python5.4.3MySQL数据库的使用2.连接到MySQL数据库【例5-8】在Python脚本中,建立与MySQL数据库的连接,并选择要使用的数据库mysqlDB。5.4.31. importmysql.connector#导入连接MySQL数据库的库2. 3. #建立数据库连接4. conn=mysql.connector.connect(5. host='localhost',#连接本机6. user='root',#账号7. password='123456',#密码8. database='mysqlDB'#数据库名9. )10. #创建游标对象11. cursor=conn.cursor()MySQL数据库的使用3.创建表并插入数据【例5-9】在mysqlDB数据库中创建一个users表用以存储爬虫数据,接着通过INSERTINTO语句向users表插入数据,然后使用SELECT语句从表中检索数据。5.4.31. importmysql.connector2. 3. conn=mysql.connector.connect(#建立数据库连接4. host='localhost',5. user='root',6. password='123456',7. database='mysqlDB'8. )9. cursor=conn.cursor()#创建游标对象10. #(1)创建表11. create_table_query="""12. CREATETABLEIFNOTEXISTSusers(13. idINTAUTO_INCREMENTPRIMARYKEY,14. nameVARCHAR(255)NOTNULL,15. ageINTNOTNULL,16. cityVARCHAR(255)17. )18. """19. cursor.execute(create_table_query)20. #(2)
插入数据21. insert_query="""22. INSERTINTOusers(name,age,city)23. VALUES(%s,%s,%s)24. """25. data=[26. ('Alice',30,'NewYork'),27. ('Bob',25,'SanFrancisco')28. ]29. cursor.executemany(insert_query,data)#执行插入多条数据命令30. mit()#提交事务31. #(3)
查询数据32. select_query="SELECT*FROMusers"33. cursor.execute(select_query)34. result=cursor.fetchall()35. forrowinresult:#输出查询结果36. print(row)37. cursor.close()#关闭游标
38. conn.close()#关闭数据库连接)5.4.41.数据采集需求本案例采集哪儿网“热门游记”栏目中每篇游记的游记名称(travelName)、出发日期(gotime)、旅游天数(days)、
人均费用(spend_money)、人物(people)、
玩法(paly_styles)、
收藏数(numbers)、
旅游景点(areas)等字段信息,如图5-20所示。使用正则表达式和xpath解析和提取请求返回的个股信息,并将采集到全球个股信息保存到MySQL服务器“mysqlDB”数据库的“travel”表中。综合案例—采集热门游记信息5.4.42.采集思路分析(1)打开去哪儿网主页的“热门游记”栏目(见图5-20),获取每一篇游记对应的游记名称(travelName)、出发日期(gotime)、旅游天数(days)、
人均费用(spend_money)、人物(people)、
玩法(paly_styles)、
收藏数(numbers)、
旅游景点(areas)等八个标签信息。(2)通过分析游记页面的加载情况,发现该网站先是展示10个游记,再是动态加载,点击翻页查看网址的规律,通过分析以下网址得出规律为:/travelbook/list/22-beijing-299914/hot_heat/1.htm……/travelbook/list/22-beijing-299914/hot_heat/{}.htm(3)此案例设置采集10页热门游记信息,用户可根据数据采集需求调整采集页数。(4)向每页游记主页发起请求,使用Xpath解析和提取返回的游记信息。综合案例—采集热门游记信息5.4.42.采集思路分析(5)在编写爬虫代码之前,先在“mysqlDB”数据库中创建“travel”表,输入如图5-21所示“travel”表的代码,用于存储采集到的游记信息。综合案例—采集热门游记信息5.4.43.采集代码实现(1)在PyCharm中,右击“Chapter5Code”的包,在快捷菜单中选择New->PythonFile命令,新建一个名称为“综合案例—采集热门游记信息”的Python文件。(2)在“综合案例—采集热门游记信息”Python文件中输入采集“热门游记”信息的爬虫代码,如图5-22所示。综合案例—采集热门游记信息5.4.43.采集代码实现综合案例—采集热门游记信息5.4.4(3)单击工具栏上的“”按钮,运行采集热门游记信息的爬虫代码,读者可以在底部“Run”窗口中看到采集热门游记信息的运行结果,如图5-23所示。当然,通过Navicat连接MySQL服务器也可以看到“mysqlDB”数据库“travel”表中存储的热门游记信息,如图5-24所示。综合案例—采集热门游记信息PATR5.5拓展案例—采集贴吧信息5.51.数据采集需求本案例采集百度贴吧中关于“计算机二级”的帖子信息,包括标题、作者、内容、链接、回复数、时间、最后回复人和帖子数,如图5-25所示。向目标网址发起请求,使用正则表达式解析和获取每一篇帖子标题、作者、内容、链接、回复数、时间、最后回复人和帖子数,并将采集的帖子信息分别存储到mongoDB服务器中“mydb”数据库的“postInfo”集合、MySQL服务器中“mysqlDB”数据库的“postInfo”表中。
拓展案例—采集贴吧信息2.采集思路分析(1)首先,通过手动翻页来浏览百度贴吧主页的URL,用户可以查看到第2页和第3页的地址为:1)/f?kw=%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E5%B8%88&ie=utf-8&pn=50&pagelets=frs-list%2Fpagelet%2Fthread&pagelets_stamp=1723967798596;2)/f?kw=%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E5%B8%88&ie=utf-8&pn=100&pagelets=frs-list%2Fpagelet%2Fthread&pagelets_stamp=1723967798596。分析和验证后,URL地址为:/f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年四川省攀枝花市医疗系统事业编人员招聘笔试备考题库及答案详解
- 2026年安徽工程大学马克思主义学院第二批科研助理岗位招聘4人考试参考题库及答案详解
- 2026年西藏自治区日喀则市工会人员招聘考试参考题库及答案详解
- 2026年防城港市防城区政务服务中心(窗口人员)招聘笔试备考试题及答案详解
- 2026年湛江市坡头区医疗系统事业编人员招聘笔试参考题库及答案详解
- 领导班子2026年8月学习教育自评报告
- 2026年杭州市江干区医疗系统事业编人员招聘笔试备考题库及答案详解
- 2026年佛山市顺德区(家电)知识产权快速维权中心公开招聘事业编制人员3人笔试备考题库及答案详解
- 2026陕西杨凌朝阳医院招聘23人考试参考题库及答案详解
- 2025年内蒙古自治区通辽市政务服务中心(窗口人员)招聘笔试试题及答案详解
- 处方流转与电子处方管理制度
- 护理查房流程六个步骤
- 国家安全教育大学生读本-第一章完全准确领会总体国家安全观
- (完整版)《增广贤文》全文
- TSG+23-2021气瓶安全技术规程
- 土木工程师(水利水电)《专业案例》近年考试真题(200题)
- 机械制图机械制图基础知识课件
- 《光伏发电工程可行性研究报告编制规程》(NB/T32043-201)中文版
- 校长培训精美课件
- 商场招商策略报告
- 大班思维训练等量代换课件
评论
0/150
提交评论