2014-09-04 26 views
-2

我想解析數千個HTML文件。我正在使用BeautifulSoup包。單個HTML文件中的多個文檔

我的HTML文檔存在的問題是,它們包含ASCII編碼格式的圖形。 BeautifulSoup包無法刪除這些字符。

好的是,有一種方法可以識別這些HTML文檔中存儲了圖形的段。但我是Python新手,無法在使用BeautifulSoup解析文檔之前找出如何刪除這些段。

所有的HTML文件含有如下所示多個文檔:

<DOCUMENT> 
<TYPE>EX-1 
<SEQUENCE>1 
<FILENAME> 
<DESCRIPTION> 
<TEXT> 
<html> 
. 
. 
</html> 
</TEXT> 
</DOCUMENT> 


<DOCUMENT> 
<TYPE>EX-2 
. 
</DOCUMENT> 

<DOCUMENT> 
<TYPE>EX-3 
. 
</DOCUMENT> 

<DOCUMENT> 
<TYPE>GRAPHIC 
. 
</DOCUMENT> 

如上圖所示,此HTML文件包含4號文件和最後一個文檔類型爲「圖形」包含圖形。我想從類型爲「GRAPHIC」的HTML文件中刪除所有這些文檔。

從這個HTML文件中刪除所有這些圖形後,我打算使用BeautifulSoup包來提取文本。

請幫助我刪除這些類型爲GRAPHIC的文檔。

這是我的代碼。此代碼能夠讀取HTML文件並將整個文本部分寫入另一個文件。問題是這個代碼也寫圖形內容。

import os 
import time 
import traceback 
import glob 
from bs4 import BeautifulSoup 
import html5lib 

path = "E:\\" 

def extract(): 
    for file in glob.glob(os.path.join(path, '*.html')): 
     try: 
      file_name = str(file).split(".txt")[0].replace("E:\\","") 
      outfile = open(file_name.replace(".html","")+".txt",'w') 
      htmlfile = open(file,"r") 
      rfile = "".join(htmlfile.readlines()) 
      htmlfile.close() 

      rsoup = BeautifulSoup(rfile,'html5lib') 

      documents = rsoup.find_all('document') 

      #REMOVE HMTL TAGS AND EXTRACT TEXTUAL CONTENT OF HTML FILE 
      a = '\n'.join([e.encode("utf-8").replace("\n","").replace("\r","").replace("\s","").replace("\t","").strip() for e in rsoup.recursiveChildGenerator() if isinstance(e,unicode) and e.strip()!=""]) 
      outfile.write(str(a)) 
      outfile.close() 
      #print a 

      #SUSPEND EXECUTION FOR 5 SECONDS 
      time.sleep(5) 

     except: 
      print "Status: Parsing Failed" 

extract() 

感謝

+0

告訴我們你做了什麼 – 2014-09-04 07:53:05

+0

爲什麼你想刪除這些部分_before_使用BeautifulSoup?只需使用BeautifulSoup解析文件,然後使用它刪除要刪除的部分。 – abarnert 2014-09-04 08:10:05

+0

@abarnert ...我在這裏發佈了我的代碼。我不知道如何根據其類型刪除特定的文檔。請幫助我使用哪個命令/函數。謝謝 – Ankit 2014-09-04 08:14:16

回答

0

使用

documents= [doc for doc in documents if doc.find('type').string!='GRAPHIC'] 

刪除所有圖形類型的文件。請注意,如果有一個沒有< TYPE>標籤的文檔,這段代碼將會崩潰。

+0

沒有標籤沒有文件。這不是一個問題。但是,上述聲明似乎並未提供所需的輸出。我不確定可能是什麼原因。是否因爲有終端標籤,即? – Ankit 2014-09-04 09:06:02

+0

你是說它錯誤地過濾文件? (標記是我的代碼工作所必需的。) – 2014-09-04 09:22:36

+0

我的HTML文件中沒有標記。因此,以上聲明過濾不正確。 – Ankit 2014-09-04 09:41:36

相關問題