文件存储到本地
保存格式有:txt csv(表格形式,excel) json(类似字典)等
保存地点:数据库,本地
文件打开方式:
-
r 读的方式打开文件
-
rb 二进制的方式读文件 通常打开一些图片音频类的文件用这个
-
r+ 读写的方式打开文件
-
rb+ 二进制读写的方式打开文件
-
w 写的方式打开文件
-
wb 二进制的形式写入文件 通常将图片或音频 写入文件的时候用
-
w+ 读写的方式打开文件
-
wb+ 二进制读写的方式的打开文件
-
a 追加的方式打开文件 当文件内由内容时,将在其后追加写入
-
ab 二进制的方式追加
-
a+ 读写的方式追加
-
ab+ 二进制读写方式追加
txt:
方便,但不利于检索
import requests
from pyquery import PyQuery as pq
#保存到本地,当前工作目录
def save(save_path):
with open(save_path,"a",encoding="utf-8") as f:
f.write("\n".join([author,question,answer]))
f.write("\n"+"=="*58+"\n")
print("保存成功")
def main():
url="https://www.zhihu.com/explore"
save_path="zhihu.txt"
global question,author,answer
headers={"User-Agent""":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
html=requests.get(url,headers=headers).text
doc=pq(html)
items=doc(".explore-tab .feed-item").items()
for item in items:
question=item.find("h2").text()
author=item.find(".author-link-line").text()
answer=pq(item.find(".content").html()).text()
save(save_path)
if __name__=="__main__":
main()
json
何为json?
一种数据格式,类似python中字典格式,结构化程度高,方便我们看。常用于前后端数据的交互。
注意的:
1 json.dumps将Python对象编码成JSON字符串
2 josn.loads 将已经编码的json字符串变为python对象。(网上抓包得到的json数据,需要解码成python对象,再进行后续处理)
将数据保存为json格式,保存到本地
import json
#将数据资料保存为json格式 json.dumps
data=[{"name":"张三",
"age":"19",
"height":"188"}]
#ensure_ascii=False 防止中文乱码
with open("test_data.json","w")as f:
f.write(json.dumps(data,indent=2,ensure_ascii=False))
将json格式的字符串转换为python对象,以便处理
实战案例:https://blog.csdn.net/weixin_43919632/article/details/89367624
csv
1.保存文件为csv格式
(1)列表数据写入
import csv
header=["name","age","height"]
#需要写入的列表数据
text1=["张三","18","188"]
text2=["李四","18","167"]
text3=["王五","26","189"]
#encoding="utf-8"或者'gbk'
with open("test.csv","w",encoding="gbk",newline='')as f:
#调用csv的writer方法初始化对象为writer
writer=csv.writer(f)
#调用writerow方法 一行行写入
writer.writerow(header)
writer.writerow(text1)
writer.writerow(text2) #注意写入的数据要是列表的形式写入
writer.writerow(text3)
"""
一次性多行写入
"""
#writer.writerows([text1,text2,text3])
效果图:
(2)字典数据写入
import csv
header=["name","age","height"]
dictext1={"name":"张三",
'age':'18',
'height':'188'}
dictext2={"name":'李四',
"age":"14",
"height":"138"}
dictext3={"name":"王五",
"age":"27",
"height":"210"}
with open("dictest.csv","w",newline='',encoding="gbk")as f:
#调用csv的DictWriter()方法初始化对象writer
writer=csv.DictWriter(f,fieldnames=header)
#写入header
writer.writeheader()
writer.writerows([dictext1,dictext2,dictext3]) #这里字典数据,要用列表括起来传进去
效果图:
csv存储实战:https://blog.csdn.net/weixin_43919632/article/details/88089699
csv文件的读取:
(1)采用csv的reader方法读取文件,初始化reader,返回一个迭代器,遍历打印出来。
import csv
with open("text.csv",'r',encoding="utf-8") as f:
reader=csv.reader(f)
for row in reader:
print(row)
(2)pandas库读取csv文件
采用read_csv方法
import pandas as pd
text=pd.read_csv("text.csv")
print(text)
数据存储到关系型数据库:
关系模型是通过二维表来存储的,每一列代表一个字段,(如上方的csv存储中,name,age,height分别是一个字段),每一行代表一条记录(dictext1,dictext2,dictext3分别是一条记录)。
关系型数据库有:MySQL,Oracle,SQLite,SQL Server 等等
MySOL的存储:
待更新。。。。