天天看點

擷取新浪網的連結資訊

sgmllib.py 包含一個重要的類: SGMLParser。SGMLParser 将 HTML 分解成有用的片段, 比如開始标記和結束标記。一旦它成功地分解出某個資料為一個有用的片段,它會根據

所發現的資料,調用一個自身内部的方法。為了使用這個分析器,您需要子類化 SGML- Parser類,并且覆寫這些方法。

SGMLParser類裡面包含了很多内部方法,開始讀取html後,遇到相應的資料就會調用其對應的方法,最重要的方法有三個:

  • start_tagname(self, attrs)
  • end_tagname(self)
  • handle_data(self, text)

tagname就是标簽名稱,比如當遇到<pre>,就會調用start_pre,遇到</pre>,就會調用 end_pre,attrs即為标簽的參數,以[(attribute, value), (attribute, value),

...]的形式傳回,我們要做的就是在其子類重載自己感興趣标簽對應的函數。

from sgmllib import SGMLParser
import urllib
import urllib2
import socket
socket.setdefaulttimeout(210)


class URLLister(SGMLParser):
def reset(self):
        self.url=[]
        SGMLParser.reset(self)


def start_a(self,attrs):
        href=[v for k,v in attrs if k=='href']
if href:
            self.url.extend(href)


parser=URLLister()


myurl='http://www.sina.com.cn'
request=urllib2.Request(myurl)
opener=urllib2.build_opener()
page=opener.open(request)


if page.code==200:
    predata=page.read()
    parser.feed(predata)
print parser.url,"\n"