繼續改進版臭事百科爬蟲20160921

2021-07-22 22:56:39 字數 3291 閱讀 6545

改動:優化了顯示,去掉

等標籤;

輸入一次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 = "" + page

user_agent = 'mozilla/4.0 (compatible; msie 5.5; windows nt)'

headers =

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('\n\n+(.*?)\n\n+

',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的內容,也就是內容

# 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

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("

","\n")+"\n\n"

print u'第%d頁,第%d個故事' %(page,i) ,onestory

i += 1

else:

break

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

日期:2014-06-03

改進1:周二也被占用

改進2:allenwithallen 20160931

語言:python 2.7

功能:按下回車依次瀏覽今日的糗百熱點

---------------------------------------

"""

print u'請按下回車瀏覽今日的糗百內容:'

raw_input(' ')

mymodel = spider_model()

mymodel.start()

簡單爬取糗事百科

剛剛入門,對於爬蟲還要折騰很久才行,雖然很多功能還沒開始掌握,但是爬取下來就很開心,接下來還會爭取進步的。把自己出現的一些錯誤都加上了注釋,我目前還在學習當中,大家一起進步。期間學了乙個新的函式,在這裡分享下 strip 網上是這麼說的 需要注意的是,傳入的是乙個字元陣列,編譯器去除兩端所有相應的字...

python 爬取糗事百科

step 1 構建乙個提取糗事百科笑話的函式import urllib2 import urllib import re import thread import time import sys reload sys sys.setdefaultencoding utf 8 defgetpage p...

Python爬取糗事百科

一 引入模組 因為urlopen功能比較簡單,所以設定 ip需引入proxyhandler和build opener模組,ip的獲取可以上西祠 查詢 import re from urllib.request import request,build opener,proxyhandler base...