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表格 》
导入:
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')