爬虫系列:存储 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上的失踪儿童信息,准备根据失踪儿童的失踪时的地理位置来更好的寻找失踪儿童,这种 ...
随机推荐
- 当src获取不到图片,onerror可指定一张默认的图片
<img src="img/789.png" onerror="javascript:this.src='img/123.png';" alt=" ...
- vue.js+elementUI文件上传、文件导入、文件下载
1.文件下载 <el-button plain @click ="exportVmExcel()" size='mini' icon="el-icon-downlo ...
- Unmount and run xfs_repair
参考连接:https://blog.csdn.net/qq_35022803/article/details/109287086 如故障图所示,sda3出现问题, 下面的解决办法: 解决办法: 原因: ...
- Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!
大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第八篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得 ...
- js运算符 及 运算符优先级
「运算符」是用于实现赋值.比较和执行算数运算等功能的符号.常用运算符分类如下符号 算数运算符 递增和递减运算符 比较运算符 逻辑运算符 赋值运算符 算数运算符 运算符 描述 案例 + 加 10+20= ...
- 服务端渲染技术NUXT
什么是服务端渲染 服务端渲染又称SSR (Server Side Render),是在服务端完成页面的内容,而不是在客户端通过AJAX获取数据. 服务器端渲染(SSR)的优势主要在于:更好的 SE ...
- LeetCode刷题 链表专题
链表专题 链表题目的一般做法 单链表的结构类型 删除节点 方法一 方法二 增加节点 LeedCode实战 LC19.删除链表的倒数第N个结点 解法思路 LC24.两两交换链表中的节点 解法思路 LC6 ...
- GoLang设计模式15 - 策略模式
策略模式是一种行为型设计模式.通过策略模式,可以在运行时修改一个对象的行为. 接下来仍然是通过例子来了解策略模式.比如说内存缓存,这是我们在开发中经常使用的东西,大家应该都有一定的了解,接下来就用内存 ...
- 单线程 Redis 为什么这么快,看看这篇就知道了
Redis 作为一种 KV 缓存服务器,有着极高的性能,相对于 Memcache,Redis 支持更多种数据类型,因此在业界应用广泛. 记得刚毕业那会参加面试,面试官会问我 Redis 为什么快,由于 ...
- centos7系列的网络yum源配置
因为新安装centos机器yum比较旧,主要是对网易源进行配置,其它源也差不多.我是在securecrt远程ssh工具操作的,非虚拟机软件上. yum install lszrz -y 安装上传工 ...