2014-12-03 100 views
2

我環顧了類似的問題,但不幸的是,沒有得到任何解決方案。正則表達式捕獲HTML源代碼中大括號的所有內容

我目前正試圖根據內容對網站進行分類,並且要做到這一點,我正在獲取他們的HTML源代碼並對其執行某種文檔/關鍵字分類。

現在,我正在取代很多停用詞,但是我想排除HTML源代碼中的函數聲明之類的東西。舉例來說:

function(){ 
     ... // function definition 
} 

我想擺脫大括號之間的所有內容,所以它只是一個空的聲明。我在Python與正則表達式庫這樣做,並嘗試以下操作:

htmlSource = re.sub('/\{([^}]+)\}/', '', htmlSource) 

不幸的是,這似乎只是擺脫的東西是被大括號直接包圍,而不是通過被封閉它。

我猜這個正則表達式也需要考慮任意數量的空白和換行符,但是我在正則表達式方面相當缺乏經驗。

任何人都可以幫忙嗎?順便說一下,我目前正在使用urllib2.urlopen()。response()來讀取html內容:如果有更好的方式獲得它(沒有不可見的JS函數聲明等),我會非常感謝,以及。

+1

如果你已經「在類似的問題左顧右盼」,我看不出你如何能沒有注意到,他們都說用正則表達式解析HTML是一個壞主意。 – 2014-12-03 15:47:53

+0

通過這個陳述我的意思是我看了一些正則表達式的問題,這些問題旨在做類似的事情,不管他們的推理如何。其次,我沒有將源存儲在數據庫中。第三,爲什麼我不想使用像're.sub('<[^<]+?>','',htmlSource)'這樣簡單的東西來擺脫標籤而不需要任何庫? – user991710 2014-12-03 15:51:01

+0

@DanielRoseman沒想到我的回覆,我剛剛讀到你的意思。看起來我必須去圖書館路線。 – user991710 2014-12-03 15:55:57

回答

1

使用HTML分析器跳過script標記。

例如,使用BeautifulSoup可以extract()所有script標籤:

from bs4 import BeautifulSoup 

data = """ 
<body> 
    <p>Some text</p> 
    <script> 
     function(){ 
      ... // function definition 
     } 
    </script> 
    <div>More text here</div> 
</body> 
""" 

soup = BeautifulSoup(data) 
for script in soup.find_all('script'): 
    script.extract() 

print soup.text 

打印:

Some text 
More text here 

而且,遵循html + regex職位的傳統,這裏是有關線程解釋了爲什麼您應該避免使用正則表達式來解析諸如HTML數據之類的東西:

+0

這將工作的'腳本'標籤的所有變化?例如,'

相關問題