2011-06-26 29 views
2

如何從html頁面提取javascript,css和img標籤的鏈接?我是否需要使用正則表達式,或者已經有一些用於html解析的輕量級庫?如何從html頁面提取javascript,css和img標籤的鏈接?

+0

對於使用regexp解析HTML,請參閱此問題的第一個答案:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags:D – pajton

+0

只要你的代碼不打算首先PARSE這個頁面,你當然可以使用正則表達式從HTML頁面中提取鏈接。因爲正則表達式無法解析HTML。但在我看來,不再需要解析一個HTML頁面來查找並從中提取一些字符串,而不是從任何其他非HTML頁面 – eyquem

回答

0

HTML不是正則表達式可解析的語言。所以不要嘗試。它休息。

我通常使用的是Beautiful Soup,它是一個解析器庫,特別用於從可能無效的標記中收集信息,就像您將在其中找到的東西一樣。

1

BeautifulSoup將做的伎倆。

import urllib 
from BeautifulSoup import BeautifulSoup 

sock = urllib.urlopen("http://stackoverflow.com") 
soup = BeautifulSoup(sock.read()) 
sock.close() 

img = soup.findAll("img") 
script = soup.findAll("script", {"type" : "text/javascript"}) 
css = soup.findAll("link", {"rel" : "stylesheet"}) 
2

HTML5Lib與lxml相結合是我喜歡使用HTML文檔中的提取數據。它以類似於現代瀏覽器的方式從錯誤中恢復,所以它使得破壞的html更易於使用。

如果你真的想運行 JS在網頁中(說的鏈接是通過函數計算)的代碼,你應該考慮看WebKit和jswebkit包,這將讓你在無頭WebKit的窗口中運行的JavaScript可以讓你的動態生成的內容供你的Python解析器檢查。

雖然在運行webkit瀏覽器時期望內存使用率,但通過webkit在python中運行js確實不難。