山东创睦网络科技:python网络爬虫文档读取

 ̄綄美尐妖づ 提交于 2020-10-28 13:41:52

大约在2008年以前,微软Office产品中的Word用.doc文件格式。这种二进制格式很难读取,而且能够读取word格式软件很少。为了跟上时代,让自己的软件能够符合主流软件的标准,微软决定使用Open Office的类XML格式标准,此后新版Word文件才与其他文字处理软件兼容,这个格式就是.docx。

  不过Python对这种Google Docs,Open Office和Microsoft Office都在使用的.docx格式支持还不够好。虽然有一个python-docx库,但是只支持创建新文档和读取一些基本的文件数据,如文件大小和文件标题,不支持正文读取。如果想要从Microsoft Office文件的正文内容,我们需要自己动手找方法:

  第一步是从文件读取XML:

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

程序执行结果如下:

 

  通过执行结果发现,确实包含了大量的信息,但是都被隐藏在XML里面,好在文档的所有正文内容都包含在<w:t>标签里面。标题的内容也是如下,这样就比较好处理了。改进后的程序代码如下:

  1.  
    from zipfile import ZipFile
  2.  
    from urllib.request import urlopen
  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'),"xml")
  12.  
    textString=wordObj.findAll("w:t")
  13.  
    for textElem in textString:
  14.  
    print(textElem.text)
  15.  
     

     

     在此处需要注意一个问题,因为此处是先将word文档转换为xml文档,所以在使用BeautifulSoup进行文档内容解析的时候,需要执行解析器的xml,这样findAll才能正常执行。不可以不指定。

执行结果如下:

 

你会看到这里docx单独一行,这是因为在原始的XML里,它是由<w:proofErr w:type="spellStart"/>标签包围的。这是Word用红色波浪线高亮显示"docx"的方式,提示这个词可能拼写错误。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!