改进版臭事百科爬虫
原文地址:http://blog.csdn.net/pleasecallmewhy/article/details/8932310
因?yàn)槌羰掳倏谱隽烁陌?#xff0c;之前的程序不能使用了,下面做了簡單修改之后能用了。最煩的還是ascii碼問題,希望懂得給解釋解釋,為什么不轉(zhuǎn)碼輸出的是中文
還有下面這個語句是什么意思有什么作用?
json.dumps(myItems, encoding="UTF-8", ensure_ascii=False)# -*- coding: utf-8 -*- import urllib2 import urllib import re import thread import time import json#----------- 加載處理糗事百科 ----------- class Spider_Model: 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 myPageunicodePage = myPage.decode("utf-8")# 找出所有class="content"的div標(biāo)記 #re.S是任意匹配模式,也就是.可以匹配換行符 myItems = re.findall('<div.*?class="content">(.*?)</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的標(biāo)題,也就是時間# # item 中第二個是div的內(nèi)容,也就是內(nèi)容# items.append([item[0].replace("\n",""),item[1].replace("\n","")])# print myItemsreturn myItems# 用于加載新的段子 def LoadPage(self): # 如果用戶未輸入quit則一直運(yùn)行 while self.enable: # 如果pages數(shù)組中的內(nèi)容小于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 Start(self): self.enable = True page = self.pageprint u'正在加載中請稍候......'# 新建一個線程在后臺加載段子并存儲 thread.start_new_thread(self.LoadPage,())#----------- 加載處理糗事百科 ----------- while self.enable: # 如果self的page數(shù)組中存有元素 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 語言:Python 2.7 操作:輸入quit退出閱讀糗事百科 功能:按下回車依次瀏覽今日的糗百熱點(diǎn) --------------------------------------- """ print u'請按下回車瀏覽今日的糗百內(nèi)容:' raw_input(' ') myModel = Spider_Model() myModel.Start()
再次改進(jìn),一個一個輸出故事:
# -*- coding: utf-8 -*- import urllib2 import urllib import re import thread import time import json#----------- 加載處理糗事百科 ----------- class Spider_Model: 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 myPageunicodePage = myPage.decode("utf-8")# 找出所有class="content"的div標(biāo)記 #re.S是任意匹配模式,也就是.可以匹配換行符 myItems = re.findall('<div.*?class="content">(.*?)</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的標(biāo)題,也就是時間# # item 中第二個是div的內(nèi)容,也就是內(nèi)容# 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則一直運(yùn)行 while self.enable: # 如果pages數(shù)組中的內(nèi)容小于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):print u'第%d頁,第%d個故事' %(page,i) ,nowPage[i].replace("\n\n","")i += 1else:breakdef Start(self): self.enable = True page = self.pageprint u'正在加載中請稍候......'# 新建一個線程在后臺加載段子并存儲 thread.start_new_thread(self.LoadPage,())#----------- 加載處理糗事百科 ----------- while self.enable: # 如果self的page數(shù)組中存有元素 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 語言:Python 2.7 操作:輸入quit退出閱讀糗事百科 功能:按下回車依次瀏覽今日的糗百熱點(diǎn) --------------------------------------- """ print u'請按下回車瀏覽今日的糗百內(nèi)容:' raw_input(' ') myModel = Spider_Model() myModel.Start()總結(jié)
- 上一篇: java 判断是否夏令时_Java日期夏
- 下一篇: c语言习题---(switch语句)