一、CSV文件
1、导入
由于是python自带的库,无需安装就可以使用,只要使用下面命令就可以导入
import csv
2 、使用方法
2.1 从csv文件读入数据
import csv
#使用open函数打开csv文件
with open('mc.csv','r')as f:
#reader是一个迭代器,for循环来打印,返回的是列表
reader = csv.reader(f)
#第一行开始遍历,表示标题数据去除(自选)
next(reader)
for read in reader:
#只打印第0行的数据
data = read[0]
print(data)
2.2 把数据写入csv文件
import csv
#写入的数据
headers = ['name', 'age', 'height']
value = [
('张氏','13','160'),
('李氏','18','180')
]
#使用open函数把数据写到csv文件(text.csv文件要在当前目录下,如果不在则填写路径)
with open('text.csv','w',encoding='utf-8',newline='') as f:
#生成一个writer对象
writer = csv.writer(f)
#读取一行使用writerow方法
writer.writerow(headers)
#读取多行使用writerows方法
writer.writerows(value)
执行后的结果:
name,age,height
张氏,13,160
李氏,18,180
小知识:csv文件的格式为逗号分隔值文件格式,可以通过excel打开,也可以另存为xls文件
3、实战
使用上次我们爬取的酷狗音乐TOP排行榜的数据来保存为csv文件,数据获取方面我就不再详细讲到,具体可以看最下面的链接,这次使用的是正则表达式来获取数据
import requests
from fake_useragent import UserAgent
import re
import csv
url = "https://www.kugou.com/yy/rank/home/1-8888.html?from=rank"
headers = {
"User-Agent": UserAgent().random
}
#写入的csv文件的第一行
head =['排名', '歌名', '时长']
response = requests.get(url, headers=headers)
response.content.decode("utf-8")
text = response.text
songnames = re.findall(r'<li class=" " title=.*?>.*?<a.*?>(.*?)</a>', text, re.S)
songtimes = re.findall(r'<span class="pc_temp_time">(.*?)</span>', text, re.S)
#定义一个列表
list = []
count = 0
for i in zip(songnames,songtimes):
songname,songtime = i
count +=1
#保存为元组的格式,之前小编保存为列表形式,但是数据出现了混乱,至今没有搞懂,有清楚的大佬记得留个言
data = (count,songname,songtime.replace("\t","").replace("\n",""))
list.append(data)
with open("song.csv", 'w',newline='') as f:
writer = csv.writer(f)
writer.writerow(head)
writer.writerows(list)
执行后的结果(如下图):
二、excel文件
1、导入
1.1 xlwt库:Python 用来在 Excel 写入数据和格式化数据的工具包,安装如下
pip install xlwt
注意:只能新建excel表格,不能修改
1.2 xlrd库:Python 用来在 读取Excel 数据的数据包,安装如下:
pip intall xlrd
2、使用方法
2.1 xlwt库:写入数据
#写入一个九九乘法表
#导入xlwt库
import xlwt
#创建workbook对象
workbook = xlwt.Workbook(encoding='utf-8')
#使用add_sheet方法添加一个sheet页面
worksheet = workbook.add_sheet('sheet1')
head = ['九九乘法表']
#写入主体部分
for j in range(0,1):
#在worksheet下使用write方法,第一个参数为行,第二个参数为列,第三个为值
worksheet.write(0,j,head[j])
for i in range(0,9):
for j in range(0,i+1):
worksheet.write(i+1,j,'%d * %d = %d'%(i+1, j+1, (i+1)*(j+1)))
#保存数据表
workbook.save('zaojiao.xls')
执行后的结果如下图:
2.2 xlrd库:读取数据
#一些常用的使用方法,这里只打印了所有行的值,其他的也可以试着打印出来
import xlrd
#先新建一个excel对象
book = xlrd.open_workbook('zaojiao.xls')
#获取下标获取sheet页数
sheet = book.sheet_by_index(0)
#或者通过名字获取sheet页面
#sheet = book.sheet_by_name()
#获取sheet中的行数
row = sheet.nrows
#获取sheet的列数
col = sheet.ncols
#通过单元格获取
cell = sheet.cell(1,1).value
cell_1 = sheet.row(2)[1].value
cell_2 = sheet.col(1)[1].value
#获取第0行的值
row_vaule = sheet.row_values(0)
#获取第0列的值
col_vaule = sheet.col_values(0)
#获取行里面的值
for i in range(row):
print(sheet.row_values(i))
执行后的结果(获取所有行的值):
['九九乘法表', '', '', '', '', '', '', '', '']
['1 * 1 = 1', '', '', '', '', '', '', '', '']
['2 * 1 = 2', '2 * 2 = 4', '', '', '', '', '', '', '']
['3 * 1 = 3', '3 * 2 = 6', '3 * 3 = 9', '', '', '', '', '', '']
['4 * 1 = 4', '4 * 2 = 8', '4 * 3 = 12', '4 * 4 = 16', '', '', '', '', '']
['5 * 1 = 5', '5 * 2 = 10', '5 * 3 = 15', '5 * 4 = 20', '5 * 5 = 25', '', '', '', '']
['6 * 1 = 6', '6 * 2 = 12', '6 * 3 = 18', '6 * 4 = 24', '6 * 5 = 30', '6 * 6 = 36', '', '', '']
['7 * 1 = 7', '7 * 2 = 14', '7 * 3 = 21', '7 * 4 = 28', '7 * 5 = 35', '7 * 6 = 42', '7 * 7 = 49', '', '']
['8 * 1 = 8', '8 * 2 = 16', '8 * 3 = 24', '8 * 4 = 32', '8 * 5 = 40', '8 * 6 = 48', '8 * 7 = 56', '8 * 8 = 64', '']
['9 * 1 = 9', '9 * 2 = 18', '9 * 3 = 27', '9 * 4 = 36', '9 * 5 = 45', '9 * 6 = 54', '9 * 7 = 63', '9 * 8 = 72', '9 * 9 = 81']
Process finished with exit code 0
3、实战
使用上次我们爬取的酷狗音乐TOP排行榜的数据来写入到excel文件中,数据获取方面我就不再详细讲到,具体可以看最下面的链接,这次使用的是正则表达式来获取数据
import requests
from fake_useragent import UserAgent
import re
import xlwt
url = "https://www.kugou.com/yy/rank/home/1-8888.html?from=rank"
headers = {
"User-Agent": UserAgent().random
}
response = requests.get(url, headers=headers)
response.content.decode("utf-8")
text = response.text
songnames = re.findall(r'<li class=" " title=.*?>.*?<a.*?>(.*?)</a>', text, re.S)
songtimes = re.findall(r'<span class="pc_temp_time">(.*?)</span>', text, re.S)
#定义一个列表
list = []
#排名
count = 0
for i in zip(songnames,songtimes):
songname,songtime = i
count +=1
data = (count,songname,songtime.replace("\t","").replace("\n",""))
list.append(data)
#创建一个Workbook对象,这就相当于创建了一个Excel文件,名称为book,style_compression表示是否压缩
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
#在book中创建一个sheet对象,这就相当与在execl文件中创建了一张sheet表
#其中的‘酷狗音乐TOP’是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格
sheet = book.add_sheet('酷狗音乐TOP', cell_overwrite_ok=True)
#写入表头
col = ('排名', '歌曲名称', '时长')
for i in range(0, 3):
sheet.write(0, i, col[i])#write方法,参数分别为行数,列数,传入的值
#写入主体部分
for i in range(0, 22):
datalist = list[i]
for j in range(0, 3):
sheet.write(i+1, j, datalist[j])
#最后用save保存下来,文件名为Top.xls
book.save('Top.xls')
执行后的结果:
三、mysql数据库+SQLyog
1、安装
1.1 mysql数据库的安装(详细的安装教程可以在网上寻找)
推荐的安装教程:
https://blog.csdn.net/bobo553443/article/details/81383194
官网地址:
https://dev.mysql.com/downloads/mysql/
1.2 SQLyog的安装
百度网盘链接: https://pan.baidu.com/s/1tPzfbHl0GpHuVX-lmFPhzA 提取码: xrf6
官方链接:https://sqlyog.en.softonic.com/
SQLyog 是一个快速而简洁的图形化管理MYSQL数据库的工具
2、 导入
PyMySQL库: Python3.x 版本中用于连接 MySQL 服务器的库
pip install pymysql
3、基本使用
#在mysql的数据库中创建一个表格
import pymysql
# 连接database
conn = pymysql.connect(
host=“你的数据库地址(如localhost)”,
user=“用户名”,password=“密码”,
database=“数据库名”,port=“端口号”
charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象cursor
cursor = conn.cursor()
# 得到一个可以执行SQL语句的游标
#cursor = conn.cursor()
# 定义要执行的SQL语句
sql = """
CREATE TABLE `USER1` (
`id` INT auto_increment PRIMARY KEY ,
`name` CHAR(10) NOT NULL UNIQUE,
`age` TINYINT NOT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8; #注意:charset='utf8' 不能写成utf-8
"""
# 执行SQL语句
cursor.execute(sql)
#映射到数据库上
conn.commit()
# 关闭光标对象
cursor.close()
# 关闭数据库连接
conn.close()
3.实战
mysql数据库含有很多的知识点,涉及到数据库的操作和sql语句的编写,大家课后可以去看sql语句的编写方法,涉及到修改、删除、插入等等操作
使用上次我们爬取的酷狗音乐TOP排行榜的pa数据来写入到数据库中,数据获取方面我就不再详细讲到,具体可以看最下面的链接,这次使用的是xpath来获取数据
import pymysql
import requests
from lxml import etree
from fake_useragent import UserAgent
headers = {
"User-Agent": UserAgent().random
}
conn = pymysql.connect(host='localhost', user='root', password='小编的密码(这里隐去)',
database='mydb', port=3306, charset='utf8')
cursor = conn.cursor()
#防止与mysql连接中断
conn.ping(reconnect=True)
#定义一个函数来获取数据并返回一个列表
def get_data(url):
list=[]
response = requests.get(url,headers=headers)
response.encoding='utf-8'
trees = etree.HTML(response.text)
ranks = trees.xpath("//div/ul/li/@data-index")
songnames = trees.xpath('//div/ul/li/a[@class="pc_temp_songname"]/text()')
songtimes = trees.xpath('//div/ul/li/span/span[@class="pc_temp_time"]/text()')
for i in zip(ranks, songnames, songtimes):
rank, songname, songtime = i
data = (int(rank) + 1, songname, songtime.replace("\t", "").replace("\n", ""))
list.append(data)
return list
#定义一个函数来把数据插入mysql数据库中
def insert_mysql(list):
#sql语句,表名为song_list,各列名为rank,song,time
sql = "insert into song_list(`rank`,`song`,`time`) values (%s,%s,%s)"
#将得到的list进行遍历从下标取值,将(li[0], li[1], li[2])映射(%s,%s,%s)上
for li in list:
cursor.execute(sql, (li[0], li[1], li[2]))
conn.commit()
if __name__ == '__main__':
url = "https://www.kugzhiou.com/yy/rank/home/1-8888.html?from=rank"
alist = get_data(url)
insert_mysql(alist)
cursor.close()
conn.close()
执行后的结果:
写在最后
数据获取的链接
数据获取的三种方法:https://blog.csdn.net/weixin_45127640/article/details/106120189