<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Skynet

    ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

    數據:
    希望 抓取
    div > p id='da' > a text
    和 div > p id='da' > html

    <div> 
       
    <id="tt">
         
    <href=/tag/php>no no</a> 
      
    </p>
      
    <id='da'>
        
    <href=/tag/php>php</a> 
        
    <href=/tag/python>python</a> 
        
    <href=/tag/vim>vim</a> 
        
    <href=/tag/windows>windows</a> 
       
    <href=/tag/wingide>wingide</a> 
      
    </p> 
    </div> 
    <id='da'>
       
    <href=/tag/wingide>hehe</a> 
    </p>

    希望結果為
    $ python t.py
    a_text: ["'php'", "'python'", "'vim'", "'windows'", "'wingide'"]

     div_html[0]:
     
    <id="da">
        
    <href="/tag/php">php</a>
        
    <href="/tag/python">python</a>
        
    <href="/tag/vim">vim</a>
        
    <href="/tag/windows">windows</a>
       <href="/tag/wingide">劉凱毅</a>
      
    </p>




    #說明
    其實 SGMLParser 我感覺最關鍵的是

    #/usr/lib/python2.5/sgmllib.py
    #
     Internal -- finish parsing of <tag/data/ (same as <tag>data</tag>)
        def finish_shorttag(self, tag, data):
            
    #而 finish_starttag finish_endtag 抓取會調用 end_* start_* 什么的 
            self.finish_starttag(tag, []) 
            self.handle_data(data)
            self.finish_endtag(tag)
       





    代碼:
    #!python
    #
    coding=UTF-8

    from sgmllib import SGMLParser
    class TestSGMLParser(SGMLParser):

        
    def reset(self, verbose=0):
            SGMLParser.reset(self)
            
            
    #提取 a text ; div html 
            self.a_text=[]
            self.div_html
    =[]

            
    #寄存變量
            self.data_text = ""
            self.data_html 
    = ""
            
            
    #業務邏輯表示變量
            #抓取 div > p id="da" > a
            #由于需要得到div p 的 html > test_div_p = 0 , 1 , 2
            self.test_div=False
            self.test_div_p
    =0
            self.test_div_p_a
    =False
            

        
    # 重寫 handle_data 
        # 寄存變量 填充值
        def handle_data(self, data):
                self.data_text 
    = self.data_text + data
            
    if self.test_div_p :
                self.data_html 
    = self.data_html +data

                
        
    # 重寫 finish_starttag 
        # self.data_html 填充值
        def finish_starttag(self, tag, attrs):
            SGMLParser.finish_starttag(self, tag, attrs)
            
    if self.test_div_p :
                    strattrs 
    = "".join([' %s="%s"' % (key, value) for key, value in attrs])
                    self.data_html
    =self.data_html+"<%(tag)s%(strattrs)s>" % locals()
        
        
    # 重寫 finish_endtag 
        # self.data_html 填充值
            def finish_endtag(self, tag):         
            SGMLParser.finish_endtag(self, tag)
            
    if self.test_div_p == 2 :
                self.data_html
    =self.data_html+"</%(tag)s>" % locals()
            
    elif self.test_div_p == 1 :
                self.data_html
    =self.data_html+"</%(tag)s>" % locals()
                self.test_div_p 
    = 0


        
    # self.test_div 狀態修改
            def start_div(self, attrs):
            self.test_div
    =True

        
    # self.test_div 狀態修改
        # self.div_html 填充
            def end_div(self):
            
    if self.test_div :    
                self.div_html.append(self.data_html)
            self.test_div
    =False

        
    # self.test_div_p 狀態修改 2 為可以填充
            def start_p(self, attrs):
                
    if self.test_div and attrs and 'id' in [ key for key, value in attrs ] and  len([ value for key, value in attrs if key=='id' and value=='da'])>0 :
                self.test_div_p
    =2

        
    # self.test_div_p 狀態修改 1 為只能填充最后一次
            def end_p(self):
            
    if self.test_div_p == 2 :
                self.test_div_p
    =1
        
            
    # self.test_div_p_a 狀態修改
            def start_a(self, attrs):
            self.data_text 
    = ""
                
    if self.test_div_p :
                    self.test_div_p_a
    =True
        
            
    # self.test_div_p_a 狀態修改
        # self.a_text 填充
            def end_a(self):
                
    if self.test_div_p and self.test_div and self.test_div_p_a  :
                        self.a_text.append(repr(self.data_text))
                self.test_div_p_a
    =False

            
    def close(self):
                SGMLParser.close(self)


    if __name__ == '__main__':
        
    try:
            f 
    = open('google.html''r')
            data 
    = f.read()
            x
    =TestSGMLParser()
            x.feed(data)
            x.close()
            
    # 我這 gvim utf8 ; cygwin gbk ,轉碼  unicode( str , 'utf8').encode('gbk')
            print "a_text: %s \n div_html[0]: \n %s"%(x.a_text[:-1],  unicode(x.div_html[0], 'utf8').encode('gbk') )

       
    except IOError, msg:
            
    print file, ":", msg

        




    頁面抓取
       抓取 pycurl + 分析用  SGMLParser + 驗證碼用 pytesser
    下面就差算法了,抓取的準備工作終于要完成了。








    整理 m.tkk7.com/Good-Game
    posted on 2009-04-07 18:27 劉凱毅 閱讀(3662) 評論(0)  編輯  收藏 所屬分類: python
    主站蜘蛛池模板: 免费v片视频在线观看视频| 国产精品入口麻豆免费观看| 国产精品无码一区二区三区免费| 亚洲精品一区二区三区四区乱码 | 国产亚洲人成网站在线观看不卡| 成人免费夜片在线观看| 免费**毛片在线播放直播| 国产天堂亚洲国产碰碰| 亚洲&#228;v永久无码精品天堂久久 | 中国人免费观看高清在线观看二区| 久久亚洲中文字幕精品一区四| 羞羞视频在线观看免费| 亚洲无线码在线一区观看| 91免费在线视频| 久久久久久亚洲Av无码精品专口 | 久久亚洲欧美国产精品| 亚洲成人高清在线| 中文在线免费看视频| 久久久亚洲欧洲日产国码农村| 97久久免费视频| 欧洲 亚洲 国产图片综合| 全免费a级毛片免费**视频| 免费的黄色网页在线免费观看| 成人午夜亚洲精品无码网站| 午夜免费福利片观看| 国产精品亚洲四区在线观看| 免费国产一级特黄久久| 免费看黄的成人APP| 久久乐国产综合亚洲精品| 国产一区二区三区在线免费| 中文精品人人永久免费| 亚洲成年人电影网站| 免费午夜爽爽爽WWW视频十八禁| 成年免费a级毛片免费看无码| 亚洲电影免费观看| 亚洲国产91精品无码专区| 99re在线免费视频| 美女啪啪网站又黄又免费| 1区1区3区4区产品亚洲| www国产亚洲精品久久久| 18禁美女裸体免费网站|