日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

改进版臭事百科爬虫

發(fā)布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 改进版臭事百科爬虫 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文地址:http://blog.csdn.net/pleasecallmewhy/article/details/8932310

因為臭事百科做了改版,之前的程序不能使用了,下面做了簡單修改之后能用了。最煩的還是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則一直運行 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退出閱讀糗事百科 功能:按下回車依次瀏覽今日的糗百熱點 --------------------------------------- """ print u'請按下回車瀏覽今日的糗百內(nèi)容:' raw_input(' ') myModel = Spider_Model() myModel.Start()

再次改進,一個一個輸出故事:

# -*- 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則一直運行 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退出閱讀糗事百科 功能:按下回車依次瀏覽今日的糗百熱點 --------------------------------------- """ print u'請按下回車瀏覽今日的糗百內(nèi)容:' raw_input(' ') myModel = Spider_Model() myModel.Start()

總結(jié)

以上是生活随笔為你收集整理的改进版臭事百科爬虫的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。