Python网络数据采集之读取文件|第05天

User:你好我是森林 Date:2018-04-01 Mark:《Python网络数据采集》 原文:https://chensenlin.cn/posts/34041/

网络采集系列文章

Python网络数据采集之创建爬虫

Python网络数据采集之HTML解析

Python网络数据采集之开始采集

Python网络数据采集之使用API

Python网络数据采集之存储数据

读取文档

文档编码

文档编码的方式通常可以根据文件的扩展名进行判断,虽然文件扩展名并不是由编码确定的,而是由开发者确定的。从最底层的角度看,所有文档都是由 01 编码而成的。例如我我们将一个后缀为png的图片后缀改为.py。用编辑器打打开就完全不对了。

只要安装了合适的库, Python 就可以帮你处理任意类型的文档。纯文本文件、视频文件和图像文件的唯一区别,就是它们的 01 面向用户的转换方式不同。

纯文本

对于纯文本的文件获取的方式很简单,用 urlopen 获取了网页之后,我们会把它转变成 BeautifulSoup对象。

from urllib.request import urlopen 

textPage = urlopen(
"http://www.pythonscraping.com/pages/warandpeace/chapter1.txt") 

print(textPage.read())

CSV 文件

Python有一个标准库对CSV文件的处理特别的友好,可以处理各类的CSV文件。文档地址

读取CSV文件

Pythoncsv 库主要是面向本地文件,就是说你的 CSV 文件得存储在你的电脑上。而进行网络数据采集的时候,很多文件都是在线的。有几个参考解决办法:

  • 手动把CSV文件下载到本机,然后用Python定位文件位置;
  • 写Python程序下载文件,读取之后再把源文件删除;
  • 从网上直接把文件读成一个字符串,然后转换成一个StringIO对象,使它具有文件的 属性。

例如获取网上的CSV文件,然后输出命令行。

from urllib.request import urlopen
from io import StringIO
import csv

data = urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ASCII','ignore')

dataFile = StringIO(data)
csvReader = csv.reader(dataFile)

for row in csvReader:
    print(row)

输出的结果:

['Name', 'Year']
["Monty Python's Flying Circus", '1970']
['Another Monty Python Record', '1971']
["Monty Python's Previous Record", '1972']
['The Monty Python Matching Tie and Handkerchief', '1973']
['Monty Python Live at Drury Lane', '1974']
['An Album of the Soundtrack of the Trailer of the Film of Monty Python and the Holy Grail', '1975']
['Monty Python Live at City Center', '1977']
['The Monty Python Instant Record Collection', '1977']
["Monty Python's Life of Brian", '1979']
["Monty Python's Cotractual Obligation Album", '1980']
["Monty Python's The Meaning of Life", '1983']
['The Final Rip Off', '1987']
['Monty Python Sings', '1989']
['The Ultimate Monty Python Rip Off', '1994']
['Monty Python Sings Again', '2014']

PDF 文件

PDFMiner3K是一个非常好用的库(是PDFMinerPython 3.x移植版)。它非常灵活,可以通过命令行使用,也可以整合到代码中。它还可以处理不同的语言编码,而且对网络文件的处理也非常方便。

下载解压后用python setup.py install完成安装。

模块的源文件下载地址: https://pypi.python.org/pypi/pdfminer3k

例如可以把任意 PDF 读成字符串,然后用 StringIO转换成文件对象。

from urllib.request import urlopen
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from io import StringIO
from io import open

def readPDF(pdfFile):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, laparams=laparams)
             process_pdf(rsrcmgr, device, pdfFile)
             device.close()
    content = retstr.getvalue() retstr.close()
    return content
    
pdfFile = urlopen("http://pythonscraping.com/pages/warandpeace/chapter1.pdf")
outputString = readPDF(pdfFile)
print(outputString)
pdfFile.close()

readPDF 函数最大的好处是,如果PDF文件在电脑里,就可以直接把 urlopen返回的对象 pdfFile 替换成普通的 open() 文件对象:

pdfFile = open("./chapter1.pdf", 'rb')

如果本文对你有所帮助,欢迎喜欢或者评论;如果你也对网络采集感兴趣,可以点击关注,这样就能够收到后续的更新。感谢您的阅读。

欢迎你免费加入我的星球,一起分享,共同成长。

知识星球

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分布式系统进阶

Kafka源码分析-网络层-1

1022
来自专栏性能与架构

NoSql数据库的主要模型

KVP键值对模型 是一组两个关联的数据项,非常简单,有很高的灵活性和可扩展性 随着数据量的增加,KVP的计算也自然增加,所以使用KVP模型的数据库是指数型的 典...

3274
来自专栏腾讯云TStack专栏

FileStore压缩存储(优化篇)

前言 前面已经分析过RBD在Ceph的文件分布,就是将一个完整的块设备,映射成大小相同的数据块,然后通过Crush算法进行Map,最后存储在文件中。FileS...

9534
来自专栏机器之心

专栏 | 想免费用谷歌资源训练神经网络?Colab详细使用教程

62111
来自专栏代码GG之家

google 进入分屏后在横屏模式按home键界面错乱( 四)

google 进入分屏后在横屏模式按home键界面错乱( 四) 你确定你了解分屏的整个流程? ? 代码阅读,请到此处http://androidxref.com...

2328
来自专栏叁金大数据

不讲CRUSH的Ceph教程是不完整的

前面我们提到了Ceph是一个支持统一存储架构的分布式存储服务。简单介绍了Ceph的基本概念和基础架构包含的组件,其中最重要的就是底层的RADOS和它的两类守护进...

2862
来自专栏码匠的流水账

聊聊partition的方式

一般来说,数据库的繁忙体现在:不同用户需要访问数据集中的不同部分,这种情况下,我们把数据的各个部分存放在不同的服务器/节点中,每个服务器/节点负责自身数据的读取...

1671
来自专栏编程

SAS-编程中的小技巧

今天分享的是SAS软件使用过程的中的几个小技巧,掌握了一些小技巧,编程的效率会提高的更快,还能减少敲代码出错率,好处很多,小编就不一一赘述了。 ...

2908
来自专栏zhisheng

机器常见需要关注的监控指标

做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑。所以,依靠强大的监控系统,收集尽可能多的指标,意义重大。但哪些指标才是有意义的呢,本着从实践中来的思想...

2541
来自专栏Python自动化测试

CSV文件在网络爬虫中的应用

在上一个文章中详细的介绍了CSV文件内容的读取和写入,那么在本次文章中结合网络爬虫的技术,把数据获取到写入到CSV的文件中,其实利用爬虫的技术...

1954

扫码关注云+社区

领取腾讯云代金券