爬虫数据存储至TXTCSVExcel.
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫数据存储至TXTCSVExcel.相关的知识,希望对你有一定的参考价值。
数据的存储是爬虫开发中一个很重要的环节,而存储的形式也分为很多种,大体来说分为两种。一种是将爬取到的数据储存到文件中,另一种就是将数据直接存储到数据库中。
本文举例子讲解如何将爬取到的数据存储到 TXT,Excel, CSV 文件中。其实这些方法大同小异,原理都差不多,只不过是分别运用了不同的库函数,使用的不同的方法而已。
TXT
存到 TXT
文件是最简单也是最好理解的,主要是用到了 open 函数。我们爬取 http://seputu.com/
,获取每个标题下的章节内容、链接。
首先使用 Requests
访 问 http://seputu.com/
, 获取 html 文 档内容。 接着分析 http://seputu.com/
首页的 HTML 结构,确定要抽取标记的位置,分析如下:
标题和章节都被包围在 <div class="mulu">
标记下,标题位于其中 的 <div class="mulu-title">
下的<h2>
中,章节位于其中的<div class="box">
下的<a>
中,代码如下所示:
我们将每一章节内容单独存入txt
中,以章节名命名。
# 爬虫数据存储到txt中
import requests
from bs4 import BeautifulSoup
# 获取用户代理:在浏览器地址栏:about://version
# 1.获取请求
url = 'http://seputu.com'
headers = {'User_Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
# 获取requet请求对象
req = requests.get(url, headers=headers)
# 2.解析数据
# 获取soup对象
soup = BeautifulSoup(req.text, 'html.parser')
# 获取所有的<div class='mulu'>
for div in soup.findAll(class_='mulu'):
# div下的h2标签下的是标题
h2 = div.find('h2')
# 排除h2为空的情况
if h2:
# 获取标题
h2_title = h2.string
# 保存数据,以每个章节大标题命名
with open('./txt_data/'+h2_title+'.txt', 'w', encoding='utf-8') as f:
# 获取每一个标题下的章节
'''
<div class='mulu>
<div class='box'>
<ul><li><a>
'''
for a in div.find(class_='box').find_all('a'):
a_href = a.get('href')
a_title = a.get('title')
a_txt = a.string
# print(a_href, '---', '---', a_txt)
# 将数据写入
f.write(a_txt+'\\t'+a_href+'\\n')
Excel
将上述示例获取到的章节内容和链接数据保存到 Excel 中。
# 爬虫数据存储到txt中
import requests
from bs4 import BeautifulSoup
import openpyxl
# 获取用户代理:在浏览器地址栏:about://version
# 1.获取请求
url = 'http://seputu.com'
headers = {'User_Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
# 2.解析请求
req = requests.get(url, headers=headers)
# 3.获取数据
soup = BeautifulSoup(req.text, 'html.parser')
# 4.保存数据
# 创建工作簿
wb = openpyxl.Workbook()
# 删除多余的Sheet
# ws = wb.active
# wb.remove_sheet('Sheet')
for div in soup.find_all(class_='mulu'):
h2 = div.find('h2')
if h2:
# 获取标题
h2_title = h2.string
# 根据每个章节获取工作表
ws = wb.create_sheet(h2_title)
# 创建表头
ws.append(['章节名称', '章节链接', '标题'])
# 获取章节名称 标题 链接
for a in div.find(class_='box').find_all('a'):
a_href = a['href']
a_title = a.get('title')
a_txt = a.string
ws.append([a_txt, a_href, a_title])
# 保存excel
wb.save('fiction.xlsx')
CSV
将列表数据写入CSV中
# 将一维数组写入CSV文件中
fo = open("price.csv", "w") # 没有该文件则会创建
ls = [['郑州', '111', '123', '121.3'], ['北京', '452', '44a', 'sda']]
for data in ls:
fo.write(','.join(data) + "\\n") # 以','分割,末尾加\\n
fo.close()
CSV文件互写
# 将一个CSV文件写入另一个里面
# 读取 CSV
ls = []
with open("price2016.csv", 'r') as fr:
for line in fr: # 将CSV文件中二维数据读入到列表变量中
line = line.replace("\\n", "")
ls.append(line.split(","))
# 数据预处理
for i in range(len(ls)): # 遍历列表变量计算百分数
for j in range(len(ls[i])):
if (ls[i][j]).replace(".", "").isnumeric(): # 用于判断一个字符串是否类似101.5小数构成,由于Python没有单个函数判断其余字符是否都是数字
ls[i][j] = "{:.2}%".format(float(ls[i][j])/100) # 将数据单位换为 %
with open("price.csv", "w") as fw:
for row in ls: # 将列表变量中的两位数数据输出到CSV文件中
print(row)
fw.write(",".join(row)+"\\n")
感谢!
加油!
以上是关于爬虫数据存储至TXTCSVExcel.的主要内容,如果未能解决你的问题,请参考以下文章