数据保存的方法(数据库《MySQL,Mongodb等》、Excel表格、文本和图片保存到本地文件夹)

xiaoxiao2021-02-28  8

创建》连接》保存》关闭 ——     需要注意保存后即时关闭!!

数据库保存:

 MySQL数据库》

导入:

import pymysql

创建数据库:

进入MySQL数据库,自行的创建数据库(设置字段和主键)。

注意:可以用自己获取的数据来作为主键(主要是为了关联两个或多个表格,比如书籍章节表与书籍内容表格等)

连接数据库:

    db = None cursor = None def connect_db(self):         #user 、password、db、port都是自己设置MySQL数据库时自己设定的值         self.db = pymysql.connect(host='localhost', user='root', passwd='123456', db='自己设置的数据库名字', port=3306, charset='utf8') self.cursor = self.db.cursor()

存入数据:

def save_list_data(self, list_data): # 遍历list_data,执行insert操作,d1.....d6为数据 for d1, d2, d3, d4, d5, d6 in list_data:             #qsbk为数据库名字,以下为插入数据                insert_sql = "INSERT INTO qsbk (d1, d2, d3, d4, d5, d6) VALUES (%s,%s,%s,%s,%s,%s,%s)" try: self.cursor.execute(insert_sql, (d1, d2, d3, d4, d5, d6)) self.db.commit() except Exception as e: print('问题数据,跳过...') self.db.rollback()

关闭数据库:

def connect_close(self): self.cursor.close() self.db.close() 注意:由于都是封装函数,需要正确的调用

Mongodb数据库》

 注意:NoSQL中的数据库和表不需要提前创建,只需要配置会自动创建

导入:

import pymongo

创建连接数据库:

方法一:此方法建立在之前已将创建过的数据库连接,在该连接下创建数据库

client = pymongo.MongoClient('localhost') db = client['数据库名']

方法二:之前还没有创建过的数据库连接(此方法重新创建数据库连接和数据库)

MONGO_HOST = 'localhost' MONGO_DB = '数据库名' MONGO_TABLE = '可以同上' #初始化函数中创建和连接 def __init__(self): # 创建数据库的连接客户端 self.client = pymongo.MongoClient(MONGO_HOST) # 根据客户端对象,连接数据库 self.db = self.client[MONGO_DB]

保存数据库:两种存储的方式(覆盖式和更新式——选择自己需要的方式)

def save_to_mongodb(data): # insert_one: 覆盖式的 db['数据表的名字'].insert_one(data) # 更新的方法: # 参数1:指定根据什么字段去数据库中进行查询,字段的值。 # 参数2:如果经过参数1的查询,查询到这条数据,执行更新的操作;反之,执行插入的操作;$set是一个固定的写法。 # 参数3:是否允许更新 db['article'].update_one({'info': data['info']}, {'$set': data}, True)

Excel保存数据:

 Excel表格 》

导入:

import xlwt

创建表格:

def open_file(self): # 1.创建workbook对象 book = xlwt.Workbook(encoding='utf-8') # 2.创建选项卡         #此处选项卡名字为:职位简介 sheet = book.add_sheet('职位简介') # 3.添加头 # 第一个参数是行,第二个参数是列,第三个参数是列的字段名 sheet.write(0, 0, '职位名称') sheet.write(0, 1, '职位详情') sheet.write(0, 2, '公司名称') sheet.write(0, 3, '职位月薪') sheet.write(0, 4, '工作地点') sheet.write(0, 5, '职位要求') return book, sheet

保存数据:

#主函数:注意:调用顺序和参数 if __name__=="__main__":    book, sheet = obj.open_file() obj.parse_page_list(sheet, html) obj.close_file(book) #初始化:初始化row def __init__(self): self.row = 1 #获取数据 def parse_page_detail(self, html, sheet, row): #获取data sheet.write(row, 5, data) def write_data(self,sheet,data): # [(), ()]:data的数据类型 #row:初始值为1,原因:第一行是字段名,数据是从第二段开始的 #href,zwmc,gsmc,zwyx,gzdd 为数据 for href,zwmc,gsmc,zwyx,gzdd in data: #可以在存入前进行数据处理 #zwmc = re.sub('<b>|</b>', '', zwmc) sheet.write(self.row, 0, zwmc) sheet.write(self.row, 1, href) sheet.write(self.row, 2, gsmc) sheet.write(self.row, 3, zwyx) sheet.write(self.row, 4, gzdd) #保存完后回调下一条数据的 #保存完一条数据,row加1,为下一条数据存储的行数 self.row += 1   关闭文件: def close_file(self, book): book.save('表名.xls')

简写版:(以:奇书网数据为例,获得数据直接存储)

def open_file(self): QiShu.workbook = xlwt.Workbook(encoding='utf-8') QiShu.sheet = QiShu.workbook.add_sheet('奇书') QiShu.sheet.write(0, 0, '标题') QiShu.sheet.write(0, 1, '点击数') QiShu.sheet.write(0, 2, '文件大小') QiShu.sheet.write(0, 3, '小说类型') QiShu.sheet.write(0, 4, '更新时间') QiShu.sheet.write(0, 5, '连载状态') QiShu.sheet.write(0, 6, '作者') QiShu.sheet.write(0, 7, '运行环境') QiShu.sheet.write(0, 8, '最新章节') QiShu.sheet.write(0, 9, '小说简介') QiShu.sheet.write(0, 10, '下载地址') def close_file(self): QiShu.workbook.save('奇书.xls') #获取数据直接保存 print(title, click_num, file_size, novel_type, date_time, status, author, env, news_article, info, url)         QiShu.sheet.write(QiShu.row, 0, title)         QiShu.sheet.write(QiShu.row, 1, click_num)         QiShu.sheet.write(QiShu.row, 2, file_size)         QiShu.sheet.write(QiShu.row, 3, novel_type)         QiShu.sheet.write(QiShu.row, 4, date_time)         QiShu.sheet.write(QiShu.row, 5, status)         QiShu.sheet.write(QiShu.row, 6, author)         QiShu.sheet.write(QiShu.row, 7, env)         QiShu.sheet.write(QiShu.row, 8, news_article)         QiShu.sheet.write(QiShu.row, 9, info)         QiShu.sheet.write(QiShu.row, 10, url)         QiShu.row += 1 #主函数 if __name__ == '__main__': qishu = QiShu() QiShu.open_file() qishu.get_index_page() QiShu.close_file()

保存到本地文件夹:

注意:

w:以写方式打开,

a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)r+:以读写模式打开w+:以读写模式打开 (参见 w )a+:以读写模式打开 (参见 a )rb:以二进制读模式打开wb:以二进制写模式打开 (参见 w )ab:以二进制追加模式打开 (参见 a )rb+:以二进制读写模式打开 (参见 r+ )wb+:以二进制读写模式打开 (参见 w+ )ab+:以二进制读写模式打开 (参见 a+ )

保存文本  》

第一种保存方法:

def save_data_to_db(self, data):         #创建方法一:创建文件(注意:a,w,wb)参数1:文件名,参数2:存入数据的是否对原数据操作,参数3:编码格式         f = open('csdn.txt', 'w', encoding='utf-8')                #创建方法二:用with as语句     #with open('csdn.txt', 'w') as f: #数据写入         for d1, d2, d3, d4, d5, d6 in data:             f.write(d1)             f.write('\n')             f.write(d2)             f.write('\n')             f.write(d3)             f.write('\n')             f.write(d4)             f.write('\n')             f.write(d5)             f.write('\n')             f.write(d6)             f.write('\n')            #关闭文件     f.close()         

保存图片  》

获取图片src属性,然后下载保存(例二(例一,例四),例三推荐)

例一:

import requests, os, shutil, re # shutil:删除多层文件夹  from bs4 import BeautifulSoup def parse_page_detail(self, detail_html): if detail_html: bs = BeautifulSoup(detail_html, "lxml") images = bs.select('.pli img') for image in images: src = image.get('src') img_name = src.split('/')[-1]                 #请求img的src,下载并保存 response = requests.get(src, headers=self.headers) if response.status_code == 200:                     #注意:wb                      with open(img_name, 'wb') as f: f.write(response.content) # 回到父级目录 os.chdir(os.path.pardir)

例二:

res = requests.get('此处是src地址').content with open('图片名.png', 'wb') as f:         #写入      f.write(res)

例三:

参数1:图片src          参数2:存储位置(  存储位置:‘c:/..../tupian/’注意存储位置可以自己创建将位置复制过来也可以在合适的位置用os.mkdir('要创建新的文件名')        图片存储的名字:%s'%name)

urlretrieve(src, 'C:/Users/Administrator/Desktop/practice/untitled1/tupian/%s' % name)

例四:(写法不同,逻辑是一样的     同上:例一,例二)

    def download_image(self, url):         try:             response = requests.get(url, headers=self.headers)             if response.status_code == 200:                 return response.content             return None         except Exception as e:             print('请求图片失败:', e, url)             return None          def save_image(self, url): content = self.download_image(url) if content: with open('{}/{}.jpg'.format(os.getcwd(), md5(url.encode('utf-8')).hexdigest()), 'wb') as f: f.write(content) else: print('图片内容为空!')

例五:

获取img对象直接保存(注意:img是图片并且已经获得这样才可以直接保存,比如:获取验证码截图直接保存本地)

img.save('captcha.png')

转载请注明原文地址: https://www.6miu.com/read-1750003.html

最新回复(0)