国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Python之HTML的解析(網頁抓取一)

2019-11-14 17:06:55
字體:
來源:轉載
供稿:網友

http://blog.csdn.net/my2010sam/article/details/14526223

---------------------

對html的解析是網頁抓取的基礎,分析抓取的結果找到自己想要的內容或標簽以達到抓取的目的。   

    HTMLParser是python用來解析html的模塊。它可以分析出html里面的標簽、數據等等,是一種處理html的簡便途徑。 HTMLParser采用的是一種事件驅動的模式,當HTMLParser找到一個特定的標記時,它會去調用一個用戶定義的函數,以此來通知程序處理它主要的用戶回調函數的命名都是以handler_開頭的,都是HTMLParser的成員函數。當我們使用時,就從HTMLParser派生出新的類,然后重新定義這幾個以handler_開頭的函數即可。這幾個函數包括:

  • handle_startendtag  處理開始標簽和結束標簽
  • handle_starttag     處理開始標簽,比如<xx>   tag不區分大小寫
  • handle_endtag       處理結束標簽,比如</xx>
  • handle_charref      處理特殊字符串,就是以&#開頭的,一般是內碼表示的字符
  • handle_entityref    處理一些特殊字符,以&開頭的,比如 &nbsp;
  • handle_data         處理數據,就是<xx>data</xx>中間的那些數據
  • handle_comment      處理注釋
  • handle_decl         處理<!開頭的,比如<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
  • handle_pi           處理形如<?instruction>的東西

def handle_starttag(self,tag,attr):
        #注意:tag不區分大小寫,此時也可以解析 <A 標簽

        # SGMLParser 會在創建attrs 時將屬性名轉化為小寫。

        if tag=='a':
            for href,link in attr:
                if href.lower()=="href":

                        pass

 

1. 基本解析,找到開始和結束標簽

 

[python] view plaincopy在CODE上查看代碼片
 
<span style="font-size:18px;">#coding:utf-8  
  •   
  • from HTMLParser import HTMLParser  
  • ''''' 
  • HTMLParser的成員函數: 
  •  
  •     handle_startendtag  處理開始標簽和結束標簽 
  •     handle_starttag     處理開始標簽,比如<xx> 
  •     handle_endtag       處理結束標簽,比如</xx> 
  •     handle_charref      處理特殊字符串,就是以&#開頭的,一般是內碼表示的字符 
  •     handle_entityref    處理一些特殊字符,以&開頭的,比如   
  •     handle_data         處理數據,就是<xx>data</xx>中間的那些數據 
  •     handle_comment      處理注釋 
  •     handle_decl         處理<!開頭的,比如<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” 
  •     handle_pi           處理形如<?instruction>的東西 
  •  
  • '''  
  • class myHtmlParser(HTMLParser):  
  •     #處理<!開頭的內容  
  •     def handle_decl(self,decl):  
  •         
     
    <span style="font-size:18px;">#coding:utf-8  
  • from HTMLParser import HTMLParser  
  • class myHtmlParser(HTMLParser):  
  •   
  •     def __init__(self):  
  •         HTMLParser.__init__(self)  
  •         self.flag=None  
  •   
  •     # 這里重新定義了處理開始標簽的函數  
  •     def handle_starttag(self,tag,attrs):  
  •          # 判斷標簽<a>的屬性  
  •         if tag=='a':  
  •             self.flag='a'  
  •             for href,link in attrs:  
  •                 if href=='href':  
  •                     print "href:",link  
  •   
  •     def handle_data(self,data):  
  •         if self.flag=='a':  
  •             print "data:",data.decode('utf-8')  
  •   
  • if __name__ == '__main__':  
  •     a = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">/  
  •     <html><head><!--insert javaScript here!--><title>test</title><body><a href="http: //www.163.com">鏈接到163</a></body></html>'  
  •     m=myHtmlParser()  
  •     m.feed(a)  
  •     m.close()  
  •   
  • 輸出結果:  
  •   
  • href: http: //www.163.com  
  • data: 鏈接到163</span>  
  •  

     

    或:

     

    [python] 派生到我的代碼片
     
      1. <span style="font-size:18px;">#coding:utf-8  
      2.   
      3. from  HTMLParser import HTMLParser  
      4. import urllib2  
      5.   
      6. class myparser(HTMLParser):  
      7.   
      8.     # 繼承父類初始化方法,并添加一個tag屬性  
      9.     def __init__(self):  
      10.         HTMLParser.__init__(self)  
      11.         self.tag = None  
      12.   
      13.     def handle_decl(self,decl):  
      14.         print u"聲明:",decl  
      15.   
      16.     def handle_starttag(self,tag,attrs):  
      17.         print u"開始標簽;",tag  
      18.   
      19.         # 判斷是否是a開頭的標簽  
      20.         if tag=='a' and len(attrs):  
      21.             #設置 self.tag 標記  
      22.             self.tag='a'  
      23.             for href,link in attrs:  
      24.                 if href=='href':  
      25.                     print href+":"+link  
      26.   
      27.     def handle_endtag(self,tag):  
      28.         print u"結束標簽:",tag  
      29.   
      30.     def handle_data(self,data):  
      31.         #處理 a 標簽開頭的數據  
      32.         if self.tag=='a':  
      33.             print u"數據內容:",data.decode("utf-8")  
      34.   
      35.     def handle_comment(self,comm):  
      36.         print u"注釋:",comm  
      37.   
      38.   
      39. if __name__ == '__main__':  
      40.   
      41.     a = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">/  
      42.     <html><head><!--insert javaScript here!--><title>test</title><body><a href="http: //www.163.com">鏈接到163</a><a href="http: //www.baidu.com">百度</a></body></html>'  
      43.     m = myparser()  
      44.     m.feed(a)  
      45.   
      46.   
      47.   
      48.   
      49.   
      50. 結果:  
      51.   
      52. 聲明: DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"  
      53. 開始標簽; html  
      54. 開始標簽; head  
      55. 注釋: insert javaScript here!  
      56. 開始標簽; title  
      57. 結束標簽: title  
      58. 開始標簽; body  
      59. 開始標簽; a  
      60. href:http: //www.163.com  
      61. 數據內容: 鏈接到163  
      62. 結束標簽: a  
      63. 開始標簽; a  
      64. href:http: //www.baidu.com  
      65. 數據內容: 百度  
      66. 結束標簽: a  
      67. 結束標簽: body  
      68. 結束標簽: html</span>  

    上一篇:你可能沒聽過的11個Python庫

    下一篇:創業公司都在使用的3款Python庫

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    學習交流
    熱門圖片
    猜你喜歡的新聞
    猜你喜歡的關注

    新聞熱點

    疑難解答

    圖片精選

    網友關注

    主站蜘蛛池模板: 西吉县| 西充县| 安丘市| 土默特右旗| 太保市| 理塘县| 大余县| 香港 | 新干县| 大余县| 弋阳县| 香河县| 都昌县| 绥芬河市| 准格尔旗| 泗阳县| 淳化县| 无棣县| 嵊泗县| 鄂伦春自治旗| 西充县| 鄯善县| 永济市| 紫云| 铁岭县| 双峰县| 房山区| 天长市| 绥芬河市| 徐州市| 山阳县| 邹平县| 黄山市| 宕昌县| 施秉县| 济南市| 资兴市| 琼结县| 运城市| 集安市| 翁源县|