专栏首页思考的代码世界Python网络数据采集之读取文档|第05天

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

主要内容:

文档编码和类型的介绍;

读取CSV、PDF等格式的文件。

读取文档

文档编码

文档编码的方式通常可以根据文件的扩展名进行判断,虽然文件扩展名并不是由编码确定的,而是由开发者确定的。从最底层的角度看,所有文档都是由 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() 文件对象:

1

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    文档编码的方式通常可以根据文件的扩展名进行判断,虽然文件扩展名并不是由编码确定的,而是由开发者确定的。从最底层的角度看,所有文档都是由 0和 1 编码而成的。例...

    你好我是森林
  • Python网络数据采集之登录采集处理|第08天

    如果我们采集的网站需要我们登录后才能获取我们想要的数据,这就需要进一步处理登录这个问题。

    你好我是森林
  • Python网络数据采集之创建爬虫|第00天

    开始本系列的文章时,可能你需要了解一下Python的基础知识,熟悉Python的基本编程,了解一些网络知识等。如果不是特别了解,可以看看我的Python基础系列...

    你好我是森林
  • JavaScript ES6 (五) – 集合

    本章我们将学习 ES6 中的 Set(集合) 及 WeakSet 集合 的相关用法及使用场景。

    柳公子
  • 带你入门 JavaScript ES6 (五) 集合

    本章我们将学习 ES6 中的 Set(集合) 及 WeakSet 集合 的相关用法及使用场景。

    柳公子
  • python开发_IDEL(Python GUI)的使用方法

    在这篇blog"Python开发_python的安装"里面你会了解到python的安装。

    Hongten
  • ActivityNet Challenge 2019 冠军模型BMN算法全解析

    【飞桨开发者说】储泽栋,北京交通大学软件学院大四在读,曾获ICPC国际大学生程序设计竞赛亚洲区域赛铜牌,全国大学生服务外包大赛二等奖

    用户1386409
  • python文件读写的基本操作(二)

    本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地...

    用户7054460
  • Python与Zynq的桥梁,米尔PYNQ开发板来了

    前言:PYNQ全称为Python Productivity for Zynq,即在Zynq全可编程ARM&FPGA融合处理架构的基础上,添加了对Python的支...

    用户7124040
  • 0-1整数规划与隐枚举法-感受剪枝的魅力

    前一段时间一直在谈支持向量机,一直到上次给出了改进版的最小二乘支持向量机在实际工程问题中的应用为止算是告一段落了,从今天开始将以斯坦福大学-吴恩达教授的机器学习...

    昱良

扫码关注云+社区

领取腾讯云代金券