爬虫数据存储至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.的主要内容,如果未能解决你的问题,请参考以下文章

[python爬虫] Selenium爬取内容并存储至MySQL数据库

scrapy按顺序启动多个爬虫代码片段(python3)

scrapy主动退出爬虫的代码片段(python3)

爬虫数据抓包获取指定CSDN博主的全部文章信息

爬虫代码实现四:采用Hbase存储爬虫数据

爬虫代码实现三:打通爬虫项目的下载解析存储流程