1、從HTML文檔中提取連接html
Python語言還有一個很是有用的模塊HTMLParser,該模塊使咱們可以根據HTML文檔中的標籤來簡潔、高效地解析HTML文檔。因此,在處理HTML文檔的時候,HTMLParser是最經常使用的模塊之一。python
處理HTML文檔的時候,咱們經常須要從其中提取出全部的連接。使用HTMLParser模塊後,這項任務將變得易如反掌。首先,咱們須要定義 一個新的HTMLParser類,以覆蓋handle_starttag()方法,咱們將使用這個方法來顯示全部標籤的HRef屬性值。瀏覽器
定義好新的HTMLParser類以後,須要建立一個實例來返回HTMLParser對象。而後,就可使用urllib.urlopen(url)打開HTML文檔並讀取該HTML文件的內容了。服務器
爲了解析HTML文件的內容並顯示包含其中的連接,可使用read()函數將數據傳遞給HTMLParser對象。HTMLParser對象 的feed函數將接收數據,並經過定義的HTMLParser對象對數據進行相應的解析。須要注意,若是傳給HTMLParser的feed()函數的數 據不完整的話,那麼不完整的標籤會保存下來,並在下一次調用feed()函數時進行解析。當HTML文件很大,須要分段發送給解析器的時候,這個功能就會 有用武之地了。下面是一個具體的例子cookie
lParser.close()app
2、從HTML文檔中提取圖像 dom
處理HTML文檔的時候,咱們經常須要從其中提取出全部的圖像。使用HTMLParser模塊後,這項任務將變得易如反掌。首先,咱們須要定義 一個新的HTMLParser類,以覆蓋handle_starttag()方法,該方法的做用是查找img標籤,並保存src屬性值所指的文件。函數
定義好新的HTMLParser類以後,須要建立一個實例來返回HTMLParser對象。而後,就可使用urllib.urlopen(url)打開HTML文檔並讀取該HTML文件的內容了。測試
爲了解析HTML文件的內容並顯示包含其中的圖像,可使用feed(data)函數將數據發送至HTMLParser對象。HTMLParser對象的feed函數將接收數據,並經過定義的HTMLParser對象對數據進行相應的解析。下面是一個具體的示例:網站
上述代碼的運行結果以下所示:
Saving afnic.fr.png
3、從HTML文檔中提取文本
處理HTML文檔的時候,咱們經常須要從其中提取出全部的文本。使用HTMLParser模塊後,這項任務將變得很是簡單了。首先,咱們須要定義一個新的HTMLParser類,以覆蓋handle_data()方法,該方法是用來解析並文本數據的。
定義好新的HTMLParser類以後,須要建立一個實例來返回HTMLParser對象。而後,就可使用urllib.urlopen(url)打開HTML文檔並讀取該HTML文件的內容了。
爲了解析HTML文件的內容並顯示包含其中的文本,咱們可使用feed(data)函數將數據傳遞給HTMLParser對象。 HTMLParser對象的feed函數將接收數據,並經過定義的HTMLParser對象對數據進行相應的解析。要注意的是,若是傳給 HTMLParser的feed()函數的數據不完整的話,那麼不完整的標籤會保存下來,並在下一次調用feed()函數時進行解析。當HTML文件很 大,須要分段發送給解析器的時候,這個功能就會有用武之地了。下面是一個具體的代碼示例:
print item
4、從HTML文檔中提取Cookies
不少時候,咱們都須要處理Cookie,幸運的是Python語言的cookielib模塊爲咱們提供了許多自動處理在HTML中的HTTP Cookie的類。當處理要求爲客戶端設置Cookie的HTML文檔的時候,這些類對咱們很是有用。
爲了從HTML文檔提取cookies,首先得使用cookielib模塊的LWPCookieJar()函數建立一個cookie jar的實例。LWPCookieJar()函數將返回一個對象,該對象能夠從硬盤加載Cookie,同時還能向硬盤存放Cookie。
接下來,使用urllib2模塊的build_opener([handler, . . .])函數建立一個opener對象,當HTML文件打開時該對象將處理cookies。函數build_opener能夠接收零個或多個處理程序(這些 程序將按照它們被指定的順序鏈接在一塊兒)做爲參數並返回一個。
注意,若是想讓urlopen()使用opener對象來打開HTML文件的話,能夠調用install_opener(opener)函數,並將opener對象傳給它。不然,請使用opener對象的open(url)函數來打開HTML文件。
一旦已經建立並安裝了opener對象,就可使用urllib2模塊中的Request(url)函數來建立一個Request對象,而後就能使用urlopen(Request)函數來打開HTML文件了。
打開HTML頁面後,該頁面的全部Cookie將被存放到LWPCookieJar對象中,以後,您可使用LWPCookieJar對象的save(filename)函數了。
上述代碼的運行結果以下所示:
頁面的頭部頁面的Cookies
5、爲HTML文檔中的屬性值添加引號
前面咱們討論了若是根據HTML解析器中的某種處理程序來解析HTML文件,但是有時候咱們卻須要使用全部的處理程序來處理HTML文檔。值得慶幸的是,使用HTMLParser模塊解析HTML文件的全部要素並不比處理連接或者圖像難多少。
這裏,咱們將討論如何使用HTMLParser模塊來解析HTML文件,從而爲「裸奔」的屬性值加上引號。首先,咱們要定義一個新的HTMLParser類,以覆蓋下面全部的處理程序來爲屬性值添加引號。
咱們還須要在parser類中定義一個函數來初始化用於存儲解析好的數據的變量,同時還要定義另一個函數來返回解析好的數據。
定義好新的HTMLParser類以後,須要建立一個實例來返回HTMLParser對象。使用咱們建立的init函數初始化該解析器,這樣,咱們就可使用urllib.urlopen(url)打開HTML文檔並讀取該HTML文件的內容了。
爲了解析HTML文件的內容並給屬性值添加引號,可使用feed(data)函數將數據傳遞給HTMLParser對象。HTMLParser對象的feed函數將接收數據,並經過定義的HTMLParser對象對數據進行相應的解析。下面是一個具體的示例代碼:
咱們還須要創建一個測試文件,名爲test2.html,該文件內容能夠從上述代碼的運行結果看到,具體以下所示: