您的位置:首页 > 理论基础 > 计算机网络

python网络爬虫文档读取-微软Word文档和.docx

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

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

  第一步是从文件读取XML:

from zipfile import ZipFile
from urllib.request import urlopen
from io import BytesIO
wordFile=urlopen("http://pythonscraping.com/pages/AWordDocument.docx").read()
wordFile=BytesIO(wordFile)
document=ZipFile(wordFile)
xml_content=document.read('word/document.xml')
print(xml_content.decode('UTF-8'))

程序执行结果如下:



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

from zipfile import ZipFile
from urllib.request import urlopen
from io import BytesIO
from bs4 import BeautifulSoup

wordFile=urlopen("http://pythonscraping.com/pages/AWordDocument.docx").read()
wordFile=BytesIO(wordFile)
document=ZipFile(wordFile)
xml_content=document.read('word/document.xml')

wordObj=BeautifulSoup(xml_content.decode('utf-8'),"xml")
textString=wordObj.findAll("w:t")
for textElem in textString:
print(textElem.text)

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

执行结果如下:



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

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息