繼續改進版臭事百科爬蟲20160921
阿新 • • 發佈:2018-12-20
本爬蟲最初始原地址:http://blog.csdn.net/pleasecallmewhy/article/details/8932310
基於的上一個改進版:第二個http://blog.csdn.net/u011350541/article/details/52264073
改動:
優化了顯示,去掉<span></br>等標籤;
輸入一次enter載入一頁而不是不停載入
# -*- coding: utf-8 -*- import urllib2 import urllib import re import thread import time import json #----------- 載入處理糗事百科 ----------- class Spider_Model: #宣告self:含有page pages enabled def __init__(self): self.page = 1 self.pages = [] self.enable = False # 將所有的段子都扣出來,新增到列表中並且返回列表 def GetPage(self,page): myUrl = "http://m.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() # print myPage unicodePage = myPage.decode("utf-8") # 找出所有class="content"的div標記 #re.S是任意匹配模式,也就是.可以匹配換行符 myItems = re.findall('<div.*?class="content">\n\n+<span>(.*?)</span>\n\n+</div>',unicodePage,re.S) items = [] # print myItems # print str(myItems).decode('string_escape') # print json.dumps(myItems, encoding="UTF-8", ensure_ascii=False) # for item in myItems: # # item 中第一個是div的標題,也就是時間 # # item 中第二個是div的內容,也就是內容 # items.append([item[0].replace("\n",""),item[1].replace("\n","")]) # print myItems # print str(myItems).decode('string_escape') # print str(myItems).encode("UTF-8") # print myItems[0] return myItems # 用於載入新的段子 def LoadPage(self): # 如果使用者未輸入quit則一直執行 while self.enable: # 如果pages陣列中的內容小於2個 # print len(self.pages) if len(self.pages) < 2: try: # 獲取新的頁面中的段子們 myPage = self.GetPage(str(self.page)) self.page += 1 self.pages.append(myPage) except: print '無法連結糗事百科!' else: time.sleep(5) # def ShowPage(self,nowPage,page): # print u'第%d頁' % page,json.dumps(nowPage, encoding="UTF-8", ensure_ascii=False) def ShowPage(self,nowPage,page): i = 0 # print len(nowPage) for i in range(0,len(nowPage)): if i < len(nowPage): oneStory="\n\n"+nowPage[i].replace("\n\n","").replace("<br/>","\n")+"\n\n" print u'第%d頁,第%d個故事' %(page,i) ,oneStory i += 1 else: break myInput = str(raw_input(u'回車鍵看下一頁,按quit退出:\n')) if myInput == "quit": self.enable = False def Start(self): self.enable = True page = self.page print u'正在載入中請稍候......' # 新建一個執行緒在後臺載入段子並存儲 thread.start_new_thread(self.LoadPage,()) #----------- 載入處理糗事百科 ----------- while self.enable: # 如果self的page陣列中存有元素 if self.pages: nowPage = self.pages[0] del self.pages[0] self.ShowPage(nowPage,page) page += 1 #----------- 程式的入口處 ----------- print u""" --------------------------------------- 程式:糗百爬蟲 版本:0.3 作者:why 日期:2014-06-03 改進1:週二也被佔用 改進2:allenwithallen 20160931 語言:Python 2.7 操作:輸入quit退出閱讀糗事百科 功能:按下回車依次瀏覽今日的糗百熱點 --------------------------------------- """ print u'請按下回車瀏覽今日的糗百內容:' raw_input(' ') myModel = Spider_Model() myModel.Start()