爬虫之数据库存储

在对于爬取数量数量较少时,我们可以将爬虫数据保存于CSV文件或者其他格式的文件中,既简单又方便,但是如果需要存储的数据量大,又要频繁访问这些数据时,就应该考虑将数据保存到数据库中了。目前主流的数据库有关系性数据库MySQL,以及非关系性数据库MongoDB和Redis等。这里我先来讲讲MySQL。

1、MySQL数据库

MySQl数据库是一个中小型关系型数据库,应用及其广泛,开源,高效,免费,可移植性好,现在有很多大厂还是在广泛使用MySQL数据库。

1.关系型数据库概述

关系型数据库,是建立在关系模型基础上的数据库,简单的讲,它由多张互相联结的二位表格组成,每一行是一条记录,每一列是一个字段,而表就是某个实体的集合,它展现的形式类似于EXCEL中常见的表格。
像SQLite,MySQL,Oracle,SQL Server DB2等都属于关系型数据库。

2.下载和安装MySQL数据库

这里常规的安装方法我不再赘述,如果后续有要求,我会补上。安装本地测试集成环境

3、数据库管理工具Navicat

MySQL安装好之后,下面就可以建立保存爬虫数据的数据库了。如果对MySQL数据库不是很精通,甚至连SQL语句都不会怎么写,那么Navicat绝对可以帮上忙。这是一个强大的数据库管理和设计工具,支持Windows,Mac OS,Linux系统。通过直观的GUI(图形用户界面),可以让用户方便的管理MySQL,Oracle,SQL Server,Mongo DB等数据库。

3.1 Navicat下载和安装

进入Navicat官网下载Navicat for MySQL,下载地址为:Navicat下载地址

3.2 连接MySQL数据库服务器

Navicat安装完成后,运行 Navicat。首先完成与MySQL数据库服务器的连接。单机“连接”按钮,在弹出的“新建连接”对话框中输入MySQL配置信息,如连接名为mysql(名称自定义),密码为安装MySQL时设置的密码,其余配置默认设置,单击“连接测试”按钮,确保连接成功,最后单机“确定”按钮,完成与MySQl服务器的连接。

3.3 新建数据库

与MySQL数据库服务器建立连接后,就可以操作MySQL数据库了。新建一个数据库,用于存储爬取的信息。右击连接名mysql,在弹出的快捷菜单中,选择“新建数据库”命令,输入数据库名,设置字符集和排序规则,单机“确定”。

3.4 新建表

在新建的数据库crawler中新建一个用于存储爬取测试的表test。字段这里根据爬取的内容设置,比如:id的设置为int型,主键,不是null,自动递增,其余字段均为varchar型。

Python爬虫之数据写入

#写入到Excel
import xlsxwriter

#创建文件,并添加一个工作表
workbook=xlsxwriter.Workbook('demo.xlsx')
worksheet=workbook.add_worksheet()

#在指定位置写入数据
worksheet.write("A1","这是A1的数据")
worksheet.write("A2","这是A2的数据")

#关闭表格文件
workbook.close()
#爬取便民查询网常用账号,并写入到Excel
import re
import requests
import xlsxwriter

headers = {
    
    
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Ap\
pleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Sa\
fari/537.36"
}

response=requests.get("http://changyongdianhuahaoma.51240.com/",headers=headers).text

pat1=r'<tr bgcolor="#EFF7F0">[\s\S]*?<td>(.*?)</td>[\s\S]*?<td>[\s\S]*?</td>[\s\S]*?</tr>'
pat2=r'<tr bgcolor="#EFF7F0">[\s\S]*?<td>[\s\S]*?</td>[\s\S]*?<td>(.*?)</td>[\s\S]*?</tr>'

pattern1=re.compile(pat1)
pattern2=re.compile(pat2)

data1=pattern1.findall(response)
data2=pattern2.findall(response)

resultlist=[]

#创建表格
workbook=xlsxwriter.Workbook("demo2.xlsx")
worksheet=workbook.add_worksheet()

for i in range(0,len(data1)):
	resultlist.append(data1[i]+data2[i])

	#写入数据
	worksheet.write("A"+str(i+1),data1[i])
	worksheet.write("B"+str(i+1),data2[i])

print(resultlist)
# 关闭表格资源,这样才会完成创建
workbook.close()
#爬取便民查询网常用账号,并写入到Mysql 
#注意:需要提前创建对应字段的数据库
import re
import requests
import pymysql

#建立数据库连接
db=pymysql.Connect(host="localhost",port=3306,user="root",passwd="AA123456",db="spider_test",charset="utf8")
cursor=db.cursor()


#爬取数据
headers = {
    
    
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Ap\
pleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Sa\
fari/537.36"
}

response=requests.get("http://changyongdianhuahaoma.51240.com/",headers=headers).text


#处理数据
pat1=r'<tr bgcolor="#EFF7F0">[\s\S]*?<td>(.*?)</td>[\s\S]*?<td>[\s\S]*?</td>[\s\S]*?</tr>'
pat2=r'<tr bgcolor="#EFF7F0">[\s\S]*?<td>[\s\S]*?</td>[\s\S]*?<td>(.*?)</td>[\s\S]*?</tr>'

pattern1=re.compile(pat1)
pattern2=re.compile(pat2)

data1=pattern1.findall(response)
data2=pattern2.findall(response)

#清空数据库原来的内容
sqll="delete from tel"
cursor.execute(sqll)
db.commit()

resultlist=[]
for i in range(0,len(data1)):
	resultlist.append(data1[i]+data2[i])

	sql="insert into tel(name,phone) values('"+data1[i]+"','"+data2[i]+"')"
	cursor.execute(sql)

print(resultlist)

db.commit()
db.close()

猜你喜欢

转载自blog.csdn.net/weixin_44617651/article/details/130007757
今日推荐