使用Python爬取网页内容时,获取网页源码文件后使用一系列解析方法提取我们需要的信息,对于提取到的信息怎么保存下来,本文提供常见的两种方法:保存到本地文件或MySQL数据库。
保存到本地csv文件
将数据以一定的格式保存到本地csv文件需要用到Python的csv模块,首先使用open函数打开一个文件对象,实例化一个writer类进而支持单行写入或多行写入(多行写入时将数据构造为统一格式:列表套元组 [(xx,xx,…),(xx,xx,…),…]
以正则表达式匹配结果为例:
import re
import csv
pattern = re.compile('正则表达式',re.S) #对正则表达式进行编译,并且re.S设置.包括换行符在内的所有字符
r_list = pattern.findall(html) #匹配整个html字符串,返回的是一个列表,但是如果正则表达式有()对匹配的内容进行保存,则返回的列表中套着一个个元组
info_list = [] #构建一个空列表处理数据
for rt in r_list:
t= (rt[0].strip(),rt[1].strip(),...) #将元组中字符串左右空格删除
info_list.append(t) #info_list的格式最终:[(xx,xx,..),(xx,xx,..),..]
#保存数据到csv文件
#以追加形式打开文件,newline=''避免出现空行现象
with open('info.csv','a',encoding='utf-8',newline='') as f:
writer = csv.writer(f)
writer.writerow(['xx','xx',...]) #单行写入,以列表形式传入,一般写入表头
writer.writerows(info_list) #多行写入
保存到MySQL数据库
数据保存到MySQL数据库需要构建数据库连接,并且将数据整理为一定格式:列表套列表 [[xx,xx,…],[xx,xx,…],…] 或 列表套元组[(xx,xx,…),(xx,xx,…),…]
以正则表达式匹配结果为例:
import re
import pymysql
pattern = re.compile('正则表达式',re.S)
r_list = pattern.findall(html) #返回的列表中套着一个个元组
info_list = [] #构建一个空列表处理数据
for rt in r_list:
t= [rt[0].strip(),rt[1].strip(),...] #将元组中字符串左右空格删除
info_list.append(t) #info_list的格式最终:[[xx,xx,..],[xx,xx,..],..]
#保存数据到MySQL数据库
db = pymysql.connect(host = 'localhost', #主机地址
port = 3306, #端口号
user = 'root', #用户名
passwd = '密码', #密码
database = 'dbname', #数据库名
charset = 'utf8')
cursor = db.cursor() #构建游标对象
cursor.execute('insert into tableName values ('xx','xx',...) #execute插入一条数据
#executemany插入多条记录
ins = '''insert into tableName values(%s,%s,%s,...)'''
cursor.executemany(ins,info_list)
db.commit()
cursor.close() #关闭游标对象
db.close() #关闭数据库连接