Python網頁抓取程式

來源:互聯網
上載者:User

本程式用於從網頁抓取文本,也就是盜墓筆記的文本提取,寫得簡單,大家莫笑

''' 

 從盜墓筆記的網站中取得各集具體內容的地址,並從各集體內容網頁中提取內容並寫入檔案中

'''#-*- encoding: gb2312 -*-import HTMLParserimport urllibimport sysclass urlParser(HTMLParser.HTMLParser):    def __init__(self):        self.urllist=[]        HTMLParser.HTMLParser.__init__(self)                    def handle_starttag(self, tag, attrs):        # 這裡重新定義了處理開始標籤的函數        if tag == 'a':            # 判斷標籤<a>的屬性            for name,value in attrs:                if name=='href':                    self.urllist.append(value)                class DocParser(HTMLParser.HTMLParser):    def __init__(self,filename):        self.readingtitle = 0        self.readingdoc=0        self.record=0               self.fsock = open(filename, 'w')                      HTMLParser.HTMLParser.__init__(self)    def __del__(self):                self.fsock.close()            def handle_starttag(self, tag, attrs):        if tag =='div':            self.record+=1        if tag == 'title':            self.readingtitle = 1        if tag == 'p':            self.readingdoc = 1            def handle_data(self,data):        if self.readingtitle:  #檢查是否取得資料        #通常這是一個慢又差的方法            data=data.encode('utf-8')            self.fsock.write( data)            self.fsock.write( '\n\n')        if self.readingdoc and self.record==11:            if not ('google' in data):                data=data.encode('utf-8')                self.fsock.write( data)    def handle_endtag(self, tag):        if tag == 'title':            self.readingtitle = 0        if tag == 'doc':            self.readingdoc = 0            def readdata(url):            temp=url.split('/')[-1]    fname=temp.split('.')[0]+'.txt'        my = DocParser(fname)    # 傳入要分析的資料,是html的。    a=urllib.urlopen(url).read()    a=a.decode('utf-8')    my.feed(a)        if __name__ == '__main__':            url=urlParser()    f=urllib.urlopen('http://www.daomubiji.com/').read()    f=f.decode('utf-8')    url.feed(f)    links=[]    for link in url.urllist:         if link.split('.')[-1]=='html':             links.append(link)        for link in links:        readdata(link)

程式比較簡單,就不具體解釋了,大部分內容東拼西湊,包括內部的注釋也沒有改。程式運行也很慢,大約要一個小時才能完成,如果要改進一是改進HTML的解釋演算法, 二是引進多線程。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.