用python解析html
python中,有三個庫可以解析html文字,HTMLParser,sgmllib,htmllib。他們的實現方法不通,但功能差不多。這三個庫中提供解析html的類都是基類,本身並不做具體的工作。他們在發現的元件後(如標籤、註釋、聲名等),會呼叫相應的函式,這些函式必須過載,因為基類中不作處理。
比如:
"""<html><head><title>Advice</title></head><body>
<p>The <a href="http://ietf.org">IETF admonishes:
<i>Be strict in what you <b>send</b>.</i></a></p>
<form>
<input type=submit > <input type=text name=start size=4></form>
</body></html>
"""
如果對這個資料做處理,當檢測到<html>標籤時,對於HTMLParser,會呼叫handle_starttag函式。
下面具體介紹下幾個庫
1、HTMLParser
此函式的輸出:
/html/body/p >> The
/html/body/p/a >> IETF admonishes:
/html/body/p/a/i >> Be strict in what you
/html/body/p/a/i/b >> send
/html/body/p/a/i >> .
對於一些網頁,可能並沒有嚴格的開始結束標籤對,這時,我們可以去忽略一些標籤。可以自己寫個堆疊來處理這些標籤。
HTMLParser有個bug,就是不能處理中文屬性,比如說,如果網頁裡有這麼一段:
<input type=submit value=跳轉到>
那麼解析到這一行時就會出錯。
錯誤原因還是正則表示式惹的禍。
attrfind = re.compile(
r'/s*([a-zA-Z_][-.:a-zA-Z_0-9]*)(/s*=/s*'
r'(/'[^/']*/'|"[^"]*"|[-a-zA-Z0-9./,:;+*%?!&$/(/)_#[email protected]]*))?')
attrfind 沒有匹配中文字元。
可以更改這個匹配已修正這個錯誤。sgmllib則不存在這種錯誤。
2、sgmllib
html格式為sgml格式的一個子集,所以sgml可以處理跟多的東西,下面通過一段程式碼來示例sgmllib的用法。
輸出:
start tag:<head>
start tag:<title>
/lala >> Advice
end tag:</title>
end tag:</head>
start tag:<body>
start tag:<p>
/lala >> The
start tag:<a>
/lala >> IETF admonishes:
start tag:<i>
/lala >> Be strict in what you
start tag:<b>
/lala >> send
end tag:</b>
/lala >> .
end tag:</i>
end tag:</a>
end tag:</p>
start tag:<form>
start tag:<input>
/lala >> ϒ
start tag:<input>
end tag:</form>
end tag:</body>
end tag:</lala>
和HTMLParser一樣,如果要用sgmllib解析html,則要繼承sgmllib.SGMLParser類,此類裡的函式都是空的,使用者需要過載它。這個類提供的功能是在特定情況下呼叫相應的函式。
比如當發現<html>標籤時,如果並沒有定義 start_html(self,attr)函式,則會呼叫unknown_starttag函式,具體怎麼處理則更具使用者。
sgml的標籤是可以自定義的,比如自己定義了一個start_lala函式,則就會處理<lala>標籤。
有個地方要說明下,如果定義了start_tagname函式,有定義了handle_starttag函式,則函式只會執行handle_starttag函式,start_tagname為空函式都沒有問題,如果沒有定義handle_starttag函式,則遇到<tagname>標籤時,會執行start_tagname函式。如果沒有定義tagname的start函式,則此標籤為未知標籤,呼叫unknown_starttag函式
相關推薦
用python解析html
python中,有三個庫可以解析html文字,HTMLParser,sgmllib,htmllib。他們的實現方法不通,但功能差不多。這三個庫中提供解析html的類都是基類,本身並不做具體的工作。他們在發現的元件後(如標籤、註釋、聲名等),會呼叫相應的函式,這些
python 極好用的解析 html 標簽的模塊 - BeautifulSoup
圖片 baidu base ... value data 取反 lin tex 記錄下各種使用姿態 測試的 html 代碼: <html> <head> <title>Test</t
Python 用HTMLParser解析HTML檔案
HTMLParser是Python自帶的模組,使用簡單,能夠很容易的實現HTML檔案的分析。 本文主要簡單講一下HTMLParser的用法. 使用時需要定義一個從類HTMLParser繼承的類,重定義函式: handle_starttag( tag, attrs) handle_starten
python 解析html網頁
class find() [] index file 字符 .com 查找 cto pyquery庫是jQuery的Python實現,可以用於解析HTML網頁內容,使用方法: 代碼如下: from pyquery import PyQuery as pq 1、可加載一段H
從零寬斷言說起到用python匹配html標簽內容
idt inpu 重要 python 感覺 出了 5% htm 轉載 版權聲明:本文為博主原創文章,轉載請附帶原文網址http://www.cnblogs.com/wbchanblog/p/7411750.html ,謝謝! 提示:本文主要是講解零寬斷言,所以閱讀本文需要有
用python給html裏的css及js文件鏈接自動添加版本號
odin link 鏈接 寫入 dir bsp gulp () pan 傳統的給文件鏈接添加版本號的方法是使用gulp-rev,這裏提出的解決方案是使用python來替代gulp-rev。 import os import re import uuid impor
python解析HTML之:PyQuery庫的介紹與使用
att 用法 hello ext dom 的人 inf 目標 title 本篇大部分轉載於https://www.jianshu.com/p/c07f7cd1b548 先放自已自己解析techweb一個網站圖片的代碼 from pyquery import PyQuery
用python解析pdf中的文字與表格【pdfplumber的安裝與使用】
我們接觸到的很多文件資料都是以pdf格式存在的,比如:論文,技術文件,標準檔案,書籍等。pdf格式使得用機器從中提取資訊格外困難。 為了解決這個問題,我找到了幾種解決方案,最後選擇了python上的pdfplumber庫,安裝和使用都相對比較方便,效果也還不錯,所以下面介紹這個庫的安裝與使用。 安裝我的電
用python解析word檔案(段落篇(paragraph) 表格篇(table) 樣式篇(style))
首先需要安裝相應的支援庫: 直接在命令列執行pip install python-docx 示例程式碼如下: import docxfrom docx import Document #匯入庫 path = "E:\\python_data\\1234.docx" #檔案路徑document = Doc
用Python組裝html表格
最近接到個需求,將報表用html組裝成表格嵌在郵件正文中發出。用Python發郵件在之前已經嘗試過,組裝html表格也不難,搜了下html的語法然後依樣畫葫蘆拼接下: html_header = '''<table border="1"> <tr> <t
用 Python 處理 HTML 轉義字元的5種方式
寫爬蟲是一個傳送請求,提取資料,清洗資料,儲存資料的過程。在這個過程中,不同的資料來源返回的資料格式各不相同,有 JSON 格式,有 XML 文件,不過大部分還是 HTML 文件,HTML 經常會混雜有轉移字元,這些字元我們需要把它轉義成真正的字元。 什麼是轉義字元 在 HTML 中 <
用python 解析XML 的幾種常見方法的介紹
XML (Extensible markup Language) 指的是可擴充套件標記語言,被設計用來傳輸和儲存資料,已經日趨成為當前許多新技術的核心,在不同的領域都有著不同的應用,它是web 發展到一定階段的必然產物 python 解析XML 常見的有三種方法 一是 xml.
Python解析html的幾種操作方式
解析html是爬蟲後的重要的一個處理資料的環節。一下記錄解析html的幾種方式。 先介紹基礎的輔助函式,主要用於獲取html並輸入解析後的結束 #把傳遞解析函式,便於下面的修改 def get_html(url, paraser=bs4_paraser): headers =
Python解析HTML定位元素(內容)HTMLParser demo
前情提要: 手上有個報告HTML,要抓取其中的資料內容。HTML檔案內容較多,相同標籤更多,不能更改。所以,選擇按內容定位,套用迴圈和判斷,將需要的資料放入列表list裡。 程式碼呈現: from HTMLParser import HTMLParser import HTMLParse
手把手教學 Android用jsoup解析html
1.jsoup介紹 很多時候,我們需要從各種網頁上面抓取資料,而jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文字內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。 2.使用場景 下面是一張關於美食的截圖,可以留意到
用Python處理HTML轉義字元的5種方式
寫爬蟲是一個傳送請求,提取資料,清洗資料,儲存資料的過程。在這個過程中,不同的資料來源返回的資料格式各不相同,有 JSON 格式,有 XML 文件,不過大部分還是 HTML 文件,HTML 經常會混雜有轉移字元,這些字元我們需要把它轉義成真正的字元。 什麼是轉義字元
python解析html提取資料,並生成word文件
今天試著用ptyhon做了一個抓取網頁內容,並生成word文件的功能,功能很簡單,做一下記錄以備以後用到。 生成word用到了第三方元件python-docx,所以先進行第三方元件的安裝。由於windows下安裝的python預設不帶setuptools這個模組,所以要先安
linux用java解析html出現中文亂碼問題
一,用java解析html文件遇到的問題 在windows環境下用BufferedReader讀取utf-8的html檔案時,沒有任何亂碼問題,但是在linux環境下讀取的時候就出現亂碼了,不知道什麼問題引起的。 後來用FileInputStream讀取,用new Str
python 解析html中的link
htmllib.HTMLParser #!/usr/bin/env python import cStringIO import formatter from htmllib import HTMLParser import urllib url = "ht
python模組之ConfigParser: 用python解析配置檔案
在程式中使用配置檔案來靈活的配置一些引數是一件很常見的事情,配置檔案的解析並不複雜,在python裡更是如此,在官方釋出的庫中就包含有做這件事情的庫,那就是ConfigParser,這裡簡單的做一些介紹。