• 《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)
  • 相关阅读:
    Service Fabric基本概念: Node, Application, Service, Partition/Replicas
    云时代分布式系统演进
    经典分布式系统设计
    拥抱Service Fabric —— 目录
    利用Azure嵌套虚拟化,解决公有云上机器不能启动的问题
    利用Snapshot快速跨Region迁移服务器
    Azure Functions + Azure Batch实现MP3音频转码方案
    利用Service Fabric承载eShop On Containers
    利用VSTS跟Kubernetes整合进行CI/CD
    在Service Fabric上部署Java应用,体验一把微服务的自动切换
  • 原文地址:https://www.cnblogs.com/chengchengaqin/p/9514913.html
Copyright © 2020-2023  润新知