2017-02-14 300 views
-4

如果URL包含某個文件(在本例中爲word文檔),請閱讀文檔的內容。我已經看到了幾個如何從本地文檔中提取文本的例子,但沒有從網址中提取文本。從一個http地址比從一個ftp是否是相同的?Python:從URL中的Word文件中提取文本

from urllib.request import urlopen 

url = 'ftp://path/to/file.docx' 

txt = urlopen(url).read() 

文本的價值是:

b'PK\x03\x04\x14\x00\x06\x00\x08\x00\x00\x00!\x00\xdd\xfc\x957f\x01\x00\x00 \x05\x00\x00\x13\x00\x08\x02[Content_Types].xml \xa2\x04\x02(\xa0\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 ...' 

我嘗試解碼

txt.decode("utf-8", "ignore") 

但這返回PK ...其次是其他奇怪的字符

保存文檔的選項然後處理它是不可行的。

我在做什麼錯?

+0

使用urlib2這是它做什麼。 :)我認爲現在有一個lib3。 – Rob

+0

https://docs.python.org/3.6/library/urllib.request.html#module-urllib.request –

+0

您可以使用urlib2從該URL下載文件,並將其保存在本地,最後從中提取數據它爲本地文件 –

回答

0

我終於找到了一個解決方案,我希望有人可以幫助

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

file = urlopen(url).read() 
file = BytesIO(file) 
document = ZipFile(file) 
content = document.read('word/document.xml') 
word_obj = BeautifulSoup(content.decode('utf-8')) 
text_document = word_obj.findAll('w:t') 
for t in text_document: 
    print(t.text) 
0

通過使用requestsdocx2txt這很簡單:

import requests 
import docx2txt 
from io import BytesIO 

url = "http://url.to.file/sample.docx" 
docx = BytesIO(requests.get(url).content) 

# extract text 
text = docx2txt.process(docx)