统计

[CP_16] Python爬虫数据的存储(Excel表格 |

2019-04-22  本文已影响172人  Fighting_001

目录结构

1. 创建Excel表格,向其内写入数据
2. 将爬虫获取的数据写入到Excel中
3. 将爬虫获取的数据写入到MySQL数据库中
    1)准备工作:创建数据库表
    2)写入数据到MySQL数据库表中

1. 创建Excel表格,向其内写入数据

下载xlsxwriter模块:

pip install xlsxwriter

代码实现:
create-xlsx.py

import xlsxwriter

# 创建文件
wb=xlsxwriter.Workbook("demo.xlsx")
# 添加工作表
ws=wb.add_worksheet()

# 在指定位置写入数据
ws.write("A1","111")
ws.write("A2","222")
ws.write("B1","333")

# 关闭表格文件
wb.close()

执行结果:

2. 将爬虫获取的数据写入到Excel中

<关联> Python数据清洗之正则表达式、实践案例(网站电话号码|电影排行列表)

代码实现:
publicPhone.py

import requests
import re
import xlsxwriter

header={
"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
}

# 发送GET请求,获取响应数据
# 若获取不到响应数据,根据需要关闭SSL验证
url="https://changyongdianhuahaoma.51240.com/"
resp=requests.get(url,headers=header,verify=False).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(resp)
data2=pattern2.findall(resp)

# 创建列表,存储"电话名称:电话号码"
result=[]

# 创建表格
wb=xlsxwriter.Workbook("demo2.xlsx")
ws=wb.add_worksheet()

# 遍历每个电话,并写入表格中保存
for i in range(0,len(data1)):
    result.append(data1[i]+": "+data2[i])   # 构造每一个电话号码

    # 写入数据到Excel表格
    ws.write("A"+str(i+1),data1[i])
    ws.write("B"+str(i+1),data2[i])
# 关闭表格文件
wb.close()

执行结果:

3. 将爬虫获取的数据写入到MySQL数据库中

<关联> Python访问MySQL数据库、字符格式处理(日期格式| json与字典|字符编码)

1)准备工作:创建数据库表

连接MySQL数据库后,执行命令创建数据库spider,如下:

create database spider

执行以下代码,实现在spider数据库中创建数据表publicPhone,如下:

create-table.py

import pymysql

# 连接数据库:主机地址、端口号;用户名&密码;数据库名
db=pymysql.Connect(host="localhost",port=3306,user="root",passwd="root",db="spider",charset="utf8")
cursor=db.cursor()  # 创建游标对象

# 创建表
sql="""
    CREATE TABLE publicPhone(
    id int NOT NULL AUTO_INCREMENT primary key,
    name varchar(20),
    phone varchar(32))
"""

cursor.execute(sql) # 执行以上sql语句
db.commit() # 提交事务
db.close()  # 关闭数据库连接
2)写入数据到MySQL数据库表中

insert-data.py

import requests
import re
import pymysql

# 建立数据库连接
# 主机地址、端口号;用户名&密码;数据库名
db=pymysql.Connect(host="localhost",port=3306,user="root",passwd="root",db="spider",charset="utf8")
cursor=db.cursor()  # 创建游标对象

# 爬取数据
header={
"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
}

# 发送GET请求,获取响应数据
# 若获取不到响应数据,根据需要关闭SSL验证
url="https://changyongdianhuahaoma.51240.com/"
resp=requests.get(url,headers=header,verify=False).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(resp)
data2=pattern2.findall(resp)

# 创建列表,存储"电话名称:电话号码"
result=[]

# 清空数据库中原有的数据
sql_1="DELETE FROM publicPhone"
cursor.execute(sql_1)
db.commit()

# 遍历每个电话,并写入数据表中保存
for i in range(0,len(data1)):
    result.append(data1[i]+": "+data2[i])   # 构造每一个电话号码

    # 向数据表中增加数据
    sql_2="INSERT INTO publicPhone(name,phone) VALUES('"+data1[i]+"','"+data2[i]+"');"
    cursor.execute(sql_2) # 执行以上sql语句
db.commit() # 提交事务
db.close()  # 关闭数据库连接

执行结果:

上一篇下一篇

猜你喜欢

热点阅读