爬虫系列:存储 CSV 文件
上一期:爬虫系列:存储媒体文件,讲解了如果通过爬虫下载媒体文件,以及下载媒体文件相关代码讲解。
本期将讲解如果将数据保存到 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: https://github.com/sycct/Scrape_1_1.git
如果有任何问题,欢迎在 github issue。
爬虫系列:存储 CSV 文件的更多相关文章
- 爬虫存储介质之CSV文件存储
本文章来自度娘 CSV文件存储 CSV,全称为Comma-Separated Values,中文可以叫做逗号分隔值或字符分隔值,其文件以纯文本形式 存储表格数据.该文件是一个字符序列,可以由任意数目的 ...
- 爬虫系列:使用 MySQL 存储数据
上一篇文章我们讲解了爬虫如何存储 CSV 文件,这篇文章,我们讲解如何将采集到的数据保存到 MySQL 数据库中. MySQL 是目前最受欢迎的开源关系型数据库管理系统.一个开源项目具有如此之竞争力实 ...
- Jmeter如何把CSV文件的路径设置成一个变量,且变量的值是一个相对路径
首先,在Jmeter中,通过User Defined Variables设置一个变量用来存储CSV文件所在文件夹的相对路径 备注: 这个相对路径前面不要加.\ 加了的话在运行的时候会报错,提示找不到那 ...
- 链接SQLServer数据库 导出csv文件
依赖::::<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>ms ...
- Python3编写网络爬虫10-数据存储方式三-CSV文件存储
3.CSV文件存储 CSV 全称 Comma-Separated Values 中文叫做逗号分隔值或者字符分隔值,文件以纯文本形式存储表格数据.文件是一个字符序列 可以由任意数目的记录组成相当于一个结 ...
- 爬虫文件存储:txt文档,json文件,csv文件
5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1.1 TXT文本存储 将数 ...
- 爬虫—文件存储—CSV存储
一,简介 CSV,全称Comma—Separated Values,可以称为逗号分隔或者字符分隔值,其文件以纯文本形式存储表格数据.该文件是一个字符序列,可以有任意的数目记录组成,记录间已某种换行符分 ...
- python爬虫系列之数据的存储(二):csv库的使用
上一篇我们讲了怎么用 json格式保存数据,这一篇我们来看看如何用 csv模块进行数据读写. 一.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因 ...
- Python爬虫小实践:寻找失踪人口,爬取失踪儿童信息并写成csv文件,方便存入数据库
前两天有人私信我,让我爬这个网站,http://bbs.baobeihuijia.com/forum-191-1.html上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种 ...
随机推荐
- Flink入门-第一篇:Flink基础概念以及竞品对比
Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...
- CANN5.0黑科技解密 | 别眨眼!缩小隧道,让你的AI模型“身轻如燕”!
摘要:CANN作为释放昇腾硬件算力的关键平台,通过深耕先进的模型压缩技术,聚力打造AMCT模型压缩工具,在保证模型精度前提下,不遗余力地降低模型的存储空间和计算量. 随着深度学习的发展,推理模型巨大的 ...
- 云主机新增swap分区
云主机内存不够用,如何新增swap 分区. 如何启用swap分区? 步骤如下: 1.查看当前系统中是否已经启用swap分区 1 2 cat /proc/swaps top 2.如果没有启用swa ...
- windows 系统文件夹挂载到 Linux 系统,拷贝(发送)文件到 windows 系统,实现异地备份
1.在windows 系统上配置好共享文件夹,用来接收Linux 系统的文件 注意:关闭windows 系统防火墙,或者添加进出站规则 2.在Linux 系统中,创建需要拷贝的文件目录 #mkdi ...
- 【Go语言学习笔记】Go语言的基础语法
上一篇已经说了,Go的语法和C的很接近,直接看看异同即可. 变量 变量名还是一样,字母或下划线开头,区分大小写.不能是关键字. Go定义了int32和int64这种类型来显示声明大小,和C里面的sho ...
- robot_framewok自动化测试--(8)SeleniumLibrary 库(selenium、元素定位、关键字和分层设计)
SeleniumLibrary 库 一.selenium 1.1.Selenium 介绍 Selenium 自动化测试工具,它主要是用于 Web 应用程序的自动化测试,但并不只局限于此,同时支持所有基 ...
- 电脑变WIFI:建立虚拟共享WIFI热点可查看WIFI密码windows中使用bat批处理命令提示符cmd创建教程含工具
台式机也可支持移动热点,Win10却提示"我们无法设置移动热点",今天我们就另辟蹊径来调教它. 建立和开启虚拟WIFI共享网络 Windows 7操作系统及以后支持承载网络,可 ...
- RDD的详解、创建及其操作
RDD的详解 RDD:弹性分布式数据集,是Spark中最基本的数据抽象,用来表示分布式集合,支持分布式操作! RDD的创建 RDD中的数据可以来源于2个地方:本地集合或外部数据源 RDD操作 分类 转 ...
- Java线程状态及同步锁
线程的生命历程 线程的五大状态 创建状态:简而言之,当创建线程对象的代码出现的时候,此时线程就进入了创建状态.这时候的线程只是行代码而已.只有调用线程的start()方法时,线程的状态才会改变,进入就 ...
- Sqlserver中判断表是否存在
在sqlserver(应该说在目前所有数据库产品)中创建一个资源如表,视图,存储过程中都要判断与创建的资源是否已经存在 在sqlserver中一般可通过查询sys.objects系统表来得知结果,不 ...