本程式用於從網頁抓取文本,也就是盜墓筆記的文本提取,寫得簡單,大家莫笑
'''
從盜墓筆記的網站中取得各集具體內容的地址,並從各集體內容網頁中提取內容並寫入檔案中
'''#-*- 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的解釋演算法, 二是引進多線程。