ad

学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_3.4 CSV 文件

网友投稿 107 2023-11-13

【摘要】 本书摘自《Python网络爬虫 从入门到精通》一书中第3章,第4节,吕云翔、张扬和韩延刚等编著。

3.4 CSV 文件

3.4.1 CSV简 介

CSV, 全称是 “Comma Separated Values” (逗号分隔值)。CSV 文件以纯文本形式存储 表格数据(数字和文本)。它由任意数目的记录组成,记录之间以某种换行符(一般就是制 表符或者逗号)分隔,每条记录中是一些字段。在进行网络抓取时,难免会遇到 CSV 数 据,而且由于CSV 的简单设计,很多时候使用 CSV 来保存数据(数据有可能是原生的网页 数据,也有可能是已经经过爬虫程序处理后的结果)也十分方便。

3.4.2 CSV的读写

学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_3.4 CSV 文件

Python 的 csv 模块面向的是本地的 CSV 文件,如果需要读取网络资源中的 CSV, 为了 让网络中遇到的数据也能被 csv 模块以本地文件的形式打开,可以先把它下载到本地,然后 定位文件路径,将其作为本地文件打开。如果只需要读取一次而并不想保存这个文件(就像 一个验证码图片那样,可见第5 章的相关内容),可以在读取操作结束后用代码删除文件。 除此之外,也可直接把网络上的 CSV 文件当作一个字符串来读,转换成一个 StringIO 对象 后就能够作为文件来操作了。

【提示】 IO 是 Input/Output 的简写,意为输入/输出, StringlO 就是在内存中读写字符串 的类。StringIO 针对的是字符串(文本),如果还要操作字节,可以使用 BytesIO。

使用 StringIO 的优点在于,这种读写是在内存中完成的(本地文件则是从硬盘读取), 因此用 StringlO 时也不需要先把 CSV 文件保存到本地。例3-1 是一个直接获取网上的 CSV 文件并读取打印的例子。

【例3-1】 获取在线 CSV 文件并读取。

from urllib.request import urlopen

from io import StringIO

import csv

data =urlopen("https://raw.githubusercontent.com/jasonong/List-of-US-States/ master/states.csv").read().decode()

dataFile =StringIO(data)

dictReader =csv.DictReader(dataFile)

print(dictReader.fieldnames)

for row in dictReader:

print(row)

运行结果为:

['State','Abbreviation']

{'Abbreviation':'AL','State':'Alabama'} {'Abbreviation':'AK','State':'Alaska'}

……

{'Abbreviation':'NY','State':'New {'Abbreviation':'NC','State':'North {'Abbreviation':'ND','State':'North {'Abbreviation':'OH','State':'Ohio'}

York'}

Carolina'}

Dakota'}

{'Abbreviation':'OK','State':'Oklahoma'}

{'Abbreviation':'OR','State':'Oregon'}

……

这里需要说明一下 DictReader 。DictReader 将 CSV 文件的每一行作为一个 dict 来返回, 而 reader 则把每一行作为一个列表返回。使用 reader 时,输出就会是这样的:

['State','Abbreviation']

……

['California','CA']

['Colorado','CO']

['Connecticut','CT']

['Delaware','DE']

['District of Columbia','DC']

['Florida','FL']

['Georgia','GA']

* …

大家根据自己的需要选用读取形式即可。

当然,在读取作为网络资源的 CSV 文件时,除了使用 StringIO, 还可以先将其下载到本 地读取后再删除(对于只需要读取一次的情况而言)。另外,有时候 xls 电子表格(使用 Office Excel 编辑)也常作为 CSV 的替代文件格式而出现,处理 xls 文件可以使用 openpyxl 模块,其设计和操作与CSV 类似。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:打开《Python 编程与应用实践》_成为Python大佬_3.1 序列
下一篇:实战之路《Excel 数据处理与分析实战宝典_第2版》_5.3 公式的查错与监视
相关文章

 发表评论

暂时没有评论,来抢沙发吧~