《python网络数据采集》读后感 第六章:读取文档

1.文档编码:

文档编码是一种告诉程序——无论是计算机的操作系统还是 Python 代码——读取文档的规 则。文档编码的方式通常可以根据文件的扩展名进行判断,虽然文件扩展名并不是由编码 确定的,而是由开发者确定的。例如,如果我把 myImage.jpg 另存为 myImage.txt,不会出 现任何问题,但当我用文本编辑器打开它的时候就有问题了。好在这种情况很少见,如果 要正确地读取一个文档,必须要知道它的扩展名。

2.纯文本:

虽然把文件存储为在线的纯文本格式并不常见,但是一些简易网站,或者拥有大量纯文本 文件的“旧式学术”(old-school)网站经常会这么做。例如,互联网工程任务组(Internet Engineering Task Force,IETF)网站就存储了 IETF 发表过的所有文档,包含 HTML、PDF和纯文本格式(例如 https://www.ietf.org/rfc/rfc1149.txt)。大多数浏览器都可以很好地显示 纯文本文件,采集它们也不会遇到什么问题。

对大多数简单的纯文本文件,像 http://www.pythonscraping.com/pages/warandpeace/chapter1. txt 这个练习文件,你可以用下面的方法读取:

1 from urllib.request import urlopen
2 
3 textPage = urlopen("http://www.pythonscraping.com/pages/warandpeace/chapter1-ru.txt")
4 print(str(textPage.read(),'utf-8'))

 

3.CSV:

Python 的 csv 库主要是面向本地文件,就是说你的 CSV 文件得存储在你的电脑上。而进行网络数据采集的时候,很多文件都是在线的。

  • 手动把 CSV 文件下载到本机,然后用 Python 定位文件位置;

  • 写 Python 程序下载文件,读取之后再把源文件删除;

  • 从网上直接把文件读成一个字符串,然后转换成一个 StringIO 对象,使它具有文件的

    属性。

4. PDF:

 

5. dox:

a. 从文件读取XML

1 from urllib.request import urlopen
2 from zipfile import ZipFile
3 from io import BytesIO
4 
5 wordFile = urlopen("http://pythonscraping.com/pages/AWordDocument.docx").read()
6 wordFile = BytesIO(wordFile)
7 document = ZipFile(wordFile)
8 xml_content = document.read('word/document.xml')
9 print(xml_content.decode('utf-8'))

把一个远程 Word 文档读成一个二进制文件对象,再用 Python 的标准库 zipfile 解压(所有的 .docx 文件为了节省空间都 进行过压缩),然后读取这个解压文件,就变成 XML 了。

 1 from urllib.request import urlopen
 2 from zipfile import ZipFile
 3 from io import BytesIO
 4 from bs4 import BeautifulSoup
 5 
 6 wordFile = urlopen("http://pythonscraping.com/pages/AWordDocument.docx").read()
 7 wordFile = BytesIO(wordFile)
 8 document = ZipFile(wordFile)
 9 xml_content = document.read('word/document.xml')
10 
11 wordObj = BeautifulSoup(xml_content.decode('utf-8'))
12 textStrings = wordObj.findAll("w:t")
13 
14 for textElem in textStrings:
15     closeTag = ""
16     try :
17         style = textElem.parent.previousSibling.find("w:pstyle")
18         if style is not None and style["w:val"] == "Title":
19             print("<h1>")
20             closeTag = "<h1>"
21     except AttributeError:
22         #不打印标签
23         pass
24     print(textElem.text)
25     print(closeTag)

 

 

 

posted @ 2018-08-21 22:38  gaknl  阅读(279)  评论(0)    收藏  举报