第9-10讲课件:数据的保存_第1页
第9-10讲课件:数据的保存_第2页
第9-10讲课件:数据的保存_第3页
第9-10讲课件:数据的保存_第4页
第9-10讲课件:数据的保存_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

趣学Python爬虫数据的保存本课目录INDEX一个网络爬虫的基本构成数据存储的方式数据库存取Excel存取TXT存取附件的保存/下载案例实践–隧道打法一个网络爬虫的基本构成一个完整的网络爬虫就是三个大的组成部分找筛本讲我们就来探讨如何存存数据的保存方式数据的保存方法数据库TXTExcel量级支持超大数据量支持相对大体量数据支持相对大体量数据读写速度中等水平读写速度中等水平速度读写速度最快可直接查看数据可直接查看数据可视化借助工具可视化查看数据以表形式呈现结构化数据以文本形式呈现数据呈现以表形式呈现结构化数据Python

openpyxl库操作Python

open函数+逻辑操作sql语句操作相对复杂适用于需要后期进行大规模数据分析且有可能存在适用于直接进行数据简单分析和结果输出适用于快速对数据进行保存,且后期在python中继续使用场景跨平台数据库存取pipinstall

sqlite3安装库/包引入库import

sqlite3连接数据库conn=

sqlite3.connect('my_data.db')创建游标/光标c=

conn.cursor()关于数据库数据库我们熟知的有

Mysql、Oracle、MongoDB、SqlServer,Pqsql以上都是以服务形式出现的数据库,属于较大规模的数据库(千万级数据量)。我们目前入门阶段将使用sqlite3为入门数据库,优势如下:操作简单,上手快麻雀虽小五脏俱全无需安装服务库文件更容易移动适合单机使用c.execute(“create/select/insert”)Sql语句mit()向数据库执行语句数据库存取引入库import

sqlite3连接数据库conn=

sqlite3.connect('my_data.db')Sqlite3

公共部分代码第一步

-

先创建数据表创建游标/光标c=

conn.cursor()Sql语句c.execute(“CREATE

TABLEinfo(name,age,

school)”)sql命令(创建表)表名重要的事情!说三遍

sql语句的具体语句

需要用引号重要的事情!说三遍

sql语句的具体语句

需要用引号重要的事情!说三遍

sql语句的具体语句

需要用引号字段名字)mit()向数据库执行语句这个命令要注意,

如果my_data.db不存在则自动创建如果已经存在则执行打开动作引入库import

sqlite3连接数据库conn=

sqlite3.connect('my_data.db')Sqlite3

公共部分代码创建游标/光标c=

conn.cursor()第二步

向表中添加数据(单个添加)name=

'hike'age=

20school=

'wanmendaxue'c.execute('INSERTINTOinfo

VALUES("%s","%s","%s")'%(name,age,school))mit()向数据库执行语句第二步

向表中添加数据(批量添加)students=

[[‘mike4’,18,‘wanmen’

],[‘mike2’,20,‘wanmen’

],[‘mike1’,“30”,‘wanmen’],]c.executemany('INSERTINTOinfoVALUES(?,?,?)’,

students)mit()向数据库执行语句注意!

executemany 注意!

(?,?,?)数据库存取引入库import

sqlite3连接数据库conn=

sqlite3.connect('my_data.db')Sqlite3

公共部分代码创建游标/光标c=

conn.cursor()第三步

全部读取forrowinc.execute('SELECT*FROMinfo

'):print(row)forrowinc.execute('SELECT*FROMinfoWHERE

school="wanmendaxue"'):print(row)数据库存取第三步

条件筛选读取Excel文档存取pipinstall

openpyxl安装库/包引入库fromopenpyxl

importWorkbook,load_workbook没有xlsx,创建新文档打开现有xlsx文档wb=

Workbook()ws=

wb.create_sheet(‘info’)ws.append([‘姓名’,

‘年龄’])wb.save('111.xlsx')wb=

load_workbook(‘111.xlsx’)ws=

wb[‘info’]forrowinresult_list:ws.append(row)wb.save(filename=‘111.xlsx')单个添加(追加)批量添加(追加)Excel文档存取批量读取wb=

load_workbook('111.xlsx')ws=

wb[‘info’]forxinws.iter_rows(min_row=1):temp_row=

[]foryin

x:temp_row.append(y.value)print(temp_row)TXT文档存取txt文档存取是最简单的一种数据持久化保存方式,无需借助任何库帮助。我们使用上下文管理器with(context

manager)和open来操作txt文档的读写withopen(‘111.txt’,‘a’,encoding=‘utf-8’)asadd:add.write(

‘数据’

+‘\n’

)

注意这个数据可以是任何数据这里的\n是一条数据一行便于区分withopen(‘111.txt’,‘r’,encoding=‘utf-8’)as

r:print(r.readlines())这里会返回一个列表存取附件的保存/下载res.content

字节码/二进制方式res.json(

)

json对象方式

res.text

-

文本方式关于附件的保存我们首先要明确的一点,

任何可以被称为附件内容的如图片、文件等这都是属于附件。附件不像是我们看到的字符串,这里可以理解成我们肉眼可识别的文字或符号。附件是以一种“乱码”保存,我们不可读,但是计算机可以读取。这些所谓的乱码在传送的时候是以字节码/二进制的方式保存和传送的。我们要做的是发起请求,然后获得请求返回的字节码/二进制,然后直接保存在本地,

这个过程就是我们传统意义上理解的下载!发起requestswithopen(‘1.jpg’,‘wb’)asw:w.write(res.content)案例实践–隧道打法爬虫的隧道打法是借助多线程,对数据进行爬取山隧道线程一线程二案例实践

隧道打法ft隧道线程一线程二隧道法的设计是:任务一人一半第一步:先做任务划分total_task=[1,2,3,4,5,6,7,8,9,10]def

task_distribution(total):a=

total[0:int(len(total)/2)]b=total[int(len(total)/2):]returna,

btask1,task2=

task_distribution(total_task)第二步:做两个线程任务def

spider1(task):print(task)def

spider2(task):print(task)t1=Thread(target=spider1,args=(task1,)

)t2=Thread(target=spider2,args=(task2,)

)t1.start()t2.start()t1.join()t2.join()print('任务完成')第三步:启动线程fromthreadingimport

Thread案例实践解析案例概况说明公开房价数据

(贝壳网)数据量10w+数据存储方式数据库(sqlite)4.数据维度:城市、楼盘名称、楼盘地址、楼盘价格、楼盘性质、楼盘状态、楼盘预览图数据清洗针对无效数据进行清理,如:未开盘、无报价、售罄、不合理单价数据数据切割,楼盘价格分为平米单价和套价反扒机制说明

(针对人模拟访问)爬取过程中的“坑”即异常处理说明/pawelsalawa/sqlitestudio/releases案例实践解析数据库开源管理工具下载MAC版本windows版本案例实践解析针对该案例的表结构因为该网站的特殊性,我们需要两张表保存数据,

第一张表是城市对应的连接,第二张表保存爬取的数据。其中第一张表是支撑表第一张表第二张表案例实践解析实践案例爬取流程爬取所有可用城市提取城市和城市对应的url存入第一个表中建立第一张表即城市表STEP-1

城市爬取STEP-2

楼盘数据提取建立第二张表即楼盘数据表从城市表逐一读取城市名和城市对应的连接爬取当前城市页面提取该页数据总页数给两个线程平均分配任务线程一完成当前全部任务线程二完成当前全部任务数据存入数据库当前城市任务完成如:1-20页21-40页进入下一个城市注意这里的多线程,使用了join阻塞线程机制,即两个线程都完成,才能进入下一个城市,保证每次任务都同时开启同时结束。任务范围/loupan/pg1

pg20/loupan/pg21

-

pg40任务范围案例实践解析大家关心的一些问题10w+数据的爬取时间:目前测得为4-6个小时(有模拟人的机制下即延时)多线程提升效率会一倍吗?

做不到,但是能提升25-50%

,原来20秒的速度,可以提升到15秒左右如果因为种种原因爬断了,

是否要从新开始?我们可以做一个日志记录每次爬到的位置,如果出现中断,可以从当前位置开始可否使用两个电脑同时爬形成分布式?可以,但是前

温馨提示

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

评论

0/150

提交评论