網路爬蟲——爬取糗事百科笑料段子

life4711發表於2015-12-23

        這兩天在看python,抱著一本python學習手冊看了好幾天了,感覺沒有什麼長進。聽說python寫網路爬蟲挺好,就在網上搜了一下教程,跟著看來看,一知半解自己也模仿著寫了一個小專案:爬取糗事百科笑料段子

      或許是頁面程式碼重寫了吧,教程的程式碼不怎麼好用,我模仿的該了一下正規表示式,修改了一下功能,感覺還能使,昨天晚上實現了。隊友說:你這學爬蟲心理就是爬黃段子啊==明明是糗事好不!

功能:爬取程式碼執行時糗事百科前6頁的笑料段子,儲存到當前資料夾的“1.txt”檔案中。

參考教程:http://blog.csdn.net/pleasecallmewhy/article/details/8932310

糗事百科主頁:http://www.qiushibaike.com

程式碼:

#coding=utf-8  
import urllib2  
import urllib  
import re  
import sys  
reload(sys)  
sys.setdefaultencoding("utf-8")  
  
#---載入----  
class Spider_Model:  
  
    def __init__(self,x):  
        self.page = x  
  
    #---將所有的段子都扣出來並且加到一個字串中  
    def GetPage(self,page):  
        myUrl = "http://www.qiushibaike.com/hot/page/" + page      
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'     
        headers = { 'User-Agent' : user_agent }     
        req = urllib2.Request(myUrl,headers = headers)  
        myResponse = urllib2.urlopen(req)  
        myPage = myResponse.read()  
        unicodePage = myPage.decode("utf-8")  
        #re.S是任意匹配模式,也就是說.可以匹配換行符  
        myItems = re.findall('<div class="content">(.*?)<!',unicodePage,re.S)  
        s=""  
        i=0  
        for items in myItems:  
            x=items.replace('<br/>','\n')  
            i=i+1  
            s=s+'\n第%d條:' % i + x  
        return s  
    def Start(self):  
        page=self.page  
        try:  
            mypage=self.GetPage(str(page))  
        except:  
            print u'無法連結糗事百科'  
        return mypage  
  
#-----主程式入口處------  
print u'載入http://www.qiushibaike.com 前2頁的段子'  
try:  
    myfile=open('./1.txt','w')  
    for x in range(1,3):  
        print u'正在載入第%d頁......' % x  
        myModel = Spider_Model(x)  
        s=myModel.Start()  
        myfile.write('\n\n=============糗事百科第%d頁=============\n' % x + s)  
    myfile.close()  
    print u'載入完畢!'  
    raw_input(u'按任意鍵退出...');
except:  
    print u'載入失敗!' 


補充python沒有大括號分塊,因此對縮排有嚴格的要求,注意[Tab]和[space]雖然都可用單個前者代替幾個後者,但是在編譯時是不一樣的,如果你編輯器中對齊了還是有錯!要注意一下是不是這兩個鍵混用時不對。另為向檔案中輸入中文字元要注意編碼,在程式碼前加上如下程式碼,否則會有亂碼
import sys
reload(sys)
sys.setdefaultencoding("utf-8")


相關文章