当前位置:网站首页>爬虫系列:存储 CSV 文件
爬虫系列:存储 CSV 文件
2022-08-08 21:17:00 【oHuangBing】
本期将讲解如果将数据保存到 CSV 文件。
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号)是存储表格数据常用文件格式。Microsoft Excel 和很多应用都支持 CSV 格式,因为它很简洁。下面是一个 CSV 文件的例子:
code,parentcode,level,name,parentcodes,province,city,district,town,pinyin,jianpin,firstchar,tel,zip,lng,lat
110000,100000,1,北京,110000,北京,,,,Beijing,BJ,B,,,116.405285,39.904989
110100,110000,2,北京市,"110000,110100",北京,北京市,,,Beijing,BJS,B,010,100000,116.405285,39.904989
110101,110100,3,东城区,"110000,110100,110101",北京,北京市,东城区,,Dongcheng,DCQ,D,010,100000,116.418757,39.917544和 Python 一样, CSV 里留白(whitespace)也是很重要的:每一行都用一个换行符,列与列之间用逗号分隔(因此也叫“逗号分隔值”)。CSV 文件还可以用 Tab 字符或其他字符分隔行,但是不太常见,用得不多。
如果你只想从网页上把 CSV 文件下载到电脑里,不打算做任何修改和解析,那么接下来的内容就不要看了,只用上一篇文章介绍的方法下载并保存 CSV 文件就可以了。
Python 的 CSV 库可以非常简单的修改 CSV 文件,甚至从零开始创建一个 CSV 文件:
import csv
import os
from os import path
class DataSaveToCSV(object):
@staticmethod
def save_data():
get_path = path.join(os.getcwd(), 'files')
if not path.exists(get_path):
os.makedirs(get_path)
csv_file = open(get_path + '\\test.csv', 'w+', newline='')
try:
writer = csv.writer(csv_file)
writer.writerow(('number', 'number plus 2', 'number times 2'))
for i in range(10):
writer.writerow((i, i + 2, i * 2))
finally:
csv_file.close()
if __name__ == '__main__':
DataSaveToCSV().save_data()如果 files 文件夹不存在,新建文件夹。如果文件已经存在,Python 会用新的数据覆盖 test.csv 文件,newline='' 去掉行与行之间得空格。
运行完成之后,你会看到一个 CSV 文件:
number,number plus 2,number times 2
0,2,0
1,3,2
2,4,4
3,5,6
4,6,8
5,7,10
6,8,12
7,9,14
8,10,16
9,11,18下面一个示例是采集某博客文章,并存储到 CSV 文件中,具体代码如下:
import csv
import os
from os import path
from utils import connection_util
from config import logger_config
class DataSaveToCSV(object):
def __init__(self):
self._init_download_dir = 'downloaded'
self._target_url = 'https://www.scrapingbee.com/blog/'
self._baseUrl = 'https://www.scrapingbee.com'
self._init_connection = connection_util.ProcessConnection()
logging_name = 'write_csv'
init_logging = logger_config.LoggingConfig()
self._logging = init_logging.init_logging(logging_name)
def scrape_data_to_csv(self):
get_path = path.join(os.getcwd(), 'files')
if not path.exists(get_path):
os.makedirs(get_path)
with open(get_path + '\\article.csv', 'w+', newline='', encoding='utf-8') as csv_file:
writer = csv.writer(csv_file)
writer.writerow(('标题', '发布时间', '内容概要'))
# 连接目标网站,获取内容
get_content = self._init_connection.init_connection(self._target_url)
if get_content:
parent = get_content.findAll("section", {"class": "section-sm"})[0]
get_row = parent.findAll("div", {"class": "col-lg-12 mb-5 mb-lg-0"})[0]
get_child_item = get_row.findAll("div", {"class": "col-md-4 mb-4"})
for item in get_child_item:
# 获取标题文字
get_title = item.find("a", {"class": "h5 d-block mb-3 post-title"}).get_text()
# 获取发布时间
get_release_date = item.find("div", {"class": "mb-3 mt-2"}).findAll("span")[1].get_text()
# 获取文章描述
get_description = item.find("p", {"class": "card-text post-description"}).get_text()
writer.writerow((get_title, get_release_date, get_description))
else:
self._logging.warning('未获取到文章任何内容,请检查!')
if __name__ == '__main__':
DataSaveToCSV().scrape_data_to_csv()代码大部分复用了前几篇文章的内容,这里需要着重说明的是:
logging_name = 'write_csv'
init_logging = logger_config.LoggingConfig()
self._logging = init_logging.init_logging(logging_name)设置日志名称,并实例化日志,用于后面记录日志。
with open(get_path + '\\article.csv', 'w+', newline='', encoding='utf-8') as csv_file:with() 定义了在执行 with 语句时要建立的运行时上下文。with() 允许对普通的 try...except...finally 使用模式进行封装以方便地重用。
newline='' 避免在 CSV 文件中行与行之间空行内容产生。
同时也设置了文件的编码为 utf-8 ,这样做的目的是避免文件含有中文或者其他语言造成乱码。
以上就是关于将采集的内容保存为 csv 文件的内容,本实例的所有代码托管于 github。
github: GitHub - sycct/Scrape_1_1: 爬虫系列:连接网站与解析 HTML 视频源代码。
如果有任何问题,欢迎在 github issue。
边栏推荐
猜你喜欢

3分钟写个VBA:Excel工作簿所有子表数据一键汇总

上下分页功能实现

微信小程序--》数据请求和页面导航

超外差半导体收音机:各个元器件的作用,如何进行调试,以及工作原理

LiveVideoStackCon 2022 上海站明日开幕!

数组的push()、pop()、shift()和unshift()方法讲解

分布式文件存储——分块上传和断点续传

Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions论文以及代码解析

matlab入门基础{特殊变量}:单元型变量和结构型变量

国足1-3不敌越南后,9000人在重温范志毅的“神预言”!
随机推荐
又来了!今天再分享几个Jupyter Notebook的使用技巧!
day4——乐优商城项目结构(6个微服务)
matlab入门基础:矩阵操作(一)
使用v-for完成图标单选三选一
MATLAB综合实例:部门工资统计图分析
Getting Started with GeoServer: 04-Publishing Shapfile Map Data
H5 移动端调取手机相机或相册
【Oracle的NVL函数用法】
数据科学竞赛:递增特征构建的简单实现
Centos下载安装redis- 使用yum
SIGIR 2022 | MCCLK: 一个用于知识感知推荐的多层次的交叉视图对比框架
oracle数据库的数据备份导出与数据导入恢复
matlab 综合练习解答(基础)
C语言斐波那锲数列前n项求和
C语言打印九九乘法表
全国基础地理数据库数据预处理
用js写一个简单的前世今生
GeoServer introductory learning: 05-Multi-level MBTiles specification data release
微信小程序下拉刷新上拉加载更多
两个行间块状div之间的间隙消除