HTMLParser妯″潡鏄疨ython涓竴涓湁鐢ㄧ殑宸ュ叿锛岀敤浜庤В鏋怘TML鏂囨。銆傚畠鎻愪緵浜嗕竴绉嶇畝鍗曡屽己澶х殑鏂瑰紡鏉ユ彁鍙栧拰澶勭悊HTML鏍囪鍜屽唴瀹广

鎴戜滑闇瑕佸鍏TMLParser妯″潡銆傚湪Python涓紝鍙互浣跨敤浠ヤ笅璇彞鏉ュ疄鐜帮細`from html.parser import HTMLParser`銆

鎴戜滑闇瑕佸垱寤轰竴涓被鏉ョ户鎵縃TMLParser銆傚湪杩欎釜绫讳腑锛屾垜浠彲浠ラ噸鍐欎竴浜涙柟娉曟潵澶勭悊HTML鏍囪鍜屽唴瀹广備緥濡傦紝`handle_starttag()`鏂规硶鍙互鍦ㄩ亣鍒板紑濮嬫爣璁版椂琚皟鐢紝`handle_data()`鏂规硶鍙互鍦ㄩ亣鍒板唴瀹规椂琚皟鐢紝`handle_endtag()`鏂规硶鍙互鍦ㄩ亣鍒扮粨鏉熸爣璁版椂琚皟鐢ㄣ

浣跨敤HTMLParser妯″潡鏃讹紝鎴戜滑鍙互浣跨敤杩欎簺鏂规硶鏉ユ彁鍙栧拰澶勭悊HTML涓殑鏁版嵁銆備緥濡傦紝鎴戜滑鍙互鍦╜handle_starttag()`鏂规硶涓鏌ユ爣璁扮被鍨嬶紝骞舵牴鎹渶瑕佹墽琛屼竴浜涙搷浣溿傚悓鏍凤紝鎴戜滑鍙互鍦╜handle_data()`鏂规硶涓幏鍙栧唴瀹癸紝骞跺湪闇瑕佹椂杩涜澶勭悊銆

姝ゅ锛孒TMLParser妯″潡杩樻彁渚涗簡涓浜涘叾浠栨湁鐢ㄧ殑鏂规硶鍜屽睘鎬с備緥濡傦紝`feed()`鏂规硶鍙互灏咹TML鏂囨。浼犻掔粰瑙f瀽鍣ㄨ繘琛岃В鏋愶紝`handle_charref()`鏂规硶鍙互澶勭悊瀛楃寮曠敤锛宍handle_entityref()`鏂规硶鍙互澶勭悊瀹炰綋寮曠敤锛宍handle_comment()`鏂规硶鍙互澶勭悊娉ㄩ噴绛夈


瀹夎妯″潡锛

npm install htmlparser
htmlparser鎻愪緵鏋勯犲嚱鏁帮細

function Parser(handler) {
  this._handler = handler;

}


HTMLParser瑙f瀽HTML:

from html.parser import HTMLParser
from html.entities import name2codepoint
class MyHTMLParser(HTMLParser):
  def handle_starttag(self, tag, attrs):
    print('<%s>' % tag)
  def handle_endtag(self, tag):
    print('</%s>' % tag)
  def handle_startendtag(self, tag, attrs):
    print('<%s/>' % tag)
  def handle_data(self, data):
    print(data)
  def handle_comment(self, data):
    print('<!--', data, '-->')
  def handle_entityref(self, name):
    print('&%s;' % name)
  def handle_charref(self, name):
    print('&#%s;' % name)
parser = MyHTMLParser()
parser.feed('''<html>
<head></head>
<body>
<!-- test html parser -->
  <p>Some <a href=\"#\">html</a> HTML tutorial...<br>END</p>
</body></html>''')
HTML鏈川涓婃槸XML鐨勫瓙闆嗭紝浣嗘槸HTML鐨勮娉曟病鏈塜ML閭d箞涓ユ牸锛屽ぇ瀹朵篃鍙互灏濊瘯鍒╃敤HTMLParser瑙f瀽HTML銆

鐭ヨ瘑鐐规墿灞曪細

甯哥敤鏂规硶浠嬬粛

l feed(data)锛氫富瑕佺敤浜庢帴鍙楀甫html鏍囩鐨剆tr锛屽綋璋冪敤杩欎釜鏂规硶鏃跺苟鎻愪緵鐩稿簲鐨刣ata鏃讹紝鏁翠釜瀹炰緥锛坕nstance锛夊紑濮嬫墽琛岋紝缁撴潫鎵цclose()銆

l handle_starttag(tag, attrs): 杩欎釜鏂规硶鎺ユ敹Parse_starttag杩斿洖鐨則ag鍜宎ttrs锛屽苟杩涜澶勭悊锛屽鐞嗘柟寮忛氬父鐢变娇鐢ㄨ呰繘琛岃鐩栵紝鏈韩涓虹┖銆

渚嬪锛岃繛鎺ョ殑start tag鏄<a>锛岄偅涔堝搴旂殑鍙傛暟tag锛'a'锛堝皬鍐)銆俛ttrs鏄痵tart tag <>涓殑灞炴э紝浠ュ厓缁勫舰寮忥紙name, value锛夎繑鍥烇紙鎵鏈夎繖浜涘唴瀹归兘鏄皬鍐欙級銆

渚嬪锛屽浜<A HREF="http://www.odweb.cn鈥>锛岄偅涔堝唴閮ㄨ皟鐢ㄥ舰寮忎负锛歨andle_starttag锛'a',[(鈥榟ref','http://www.odweb.cn)]锛.

l handle_endtag(tag)锛氳窡涓婅堪涓鏍凤紝鍙槸澶勭悊鐨勬槸缁撴潫鏍囩锛屼篃灏辨槸浠</寮澶寸殑鏍囩銆

l handle_data(data)锛氬鐞嗙殑鏄綉椤电殑鏁版嵁锛屼篃灏辨槸寮濮嬫爣绛惧拰缁撴潫鏍囩涔嬮棿鐨勫唴瀹广備緥濡傦細<script>...</script>鐨勭渷鐣ュ彿鍐呭

l handle_comment(data) 锛屽鐞嗘敞閲婏紝<!-- -->涔嬮棿鐨勬枃鏈

l reset()锛氬皢瀹炰緥閲嶇疆锛屽寘鎷綔涓哄弬鏁拌緭鍏ョ殑鏁版嵁杩涜娓呯┖銆

浠ヤ笂灏辨槸python涓璈TMLParser妯″潡鐭ヨ瘑鐐规荤粨鐨勮缁嗗唴瀹癸紝鏇村淇℃伅璇峰叧娉∣D浜戝叾瀹冪浉鍏虫枃绔狅紒



鏈枃URL锛http://www.odweb.cn/news_show.html?id=217