# -*- coding:utf-8 -*-
import urllib
import urllib2
import re
import thread
import time
''' 糗事百科爬蟲練習
'''
#糗事百科爬蟲類
class qsbk:
#初始化方法,定義一些變數
def __init__(self):
self.pageindex = 1
self.user_agent = 'mozilla/4.0 (compatible; msie 5.5; windows nt)'
#初始化headers
self.headers =
#存放段子的變數,每乙個元素是每一頁的段子們
self.stories =
#存放程式是否繼續執行的變數
self.enable = false
#傳入某一頁的索引獲得頁面**
def getpage(self,pageindex):
try:
url = '' + str(pageindex)
#構建請求的request
request = urllib2.request(url,headers = self.headers)
#利用urlopen獲取頁面**
response = urllib2.urlopen(request)
#將頁面轉化為utf-8編碼
pagecode = response.read().decode('utf-8')
# print pagecode
return pagecode
except urllib2.urlerror, e:
if hasattr(e,"reason"):
print u"連線糗事百科失敗,錯誤原因",e.reason
return none
#傳入某一頁**,返回本頁不帶的段子列表
def getpageitems(self,pageindex):
pagecode = self.getpage(pageindex)
if not pagecode:
print "頁面載入失敗...."
return none
#獲得頁面的段子內容
pattern = re.compile('.*?(.*?)',re.s)
items = re.findall(pattern,pagecode)
#用來儲存每頁的段子們
pagestories =
#遍歷正規表示式匹配的資訊
for item in items:
replacebr = re.compile('
') text = re.sub(replacebr,"\n",item)
#item[0]是乙個段子的發布者,item[1]是內容,item[2]是發布時間,item[4]是點讚數
return pagestories
#載入並提取頁面的內容,加入到列表中
def loadpage(self):
#如果當前未看的頁數少於2頁,則載入新一頁
if self.enable == true:
if len(self.stories) < 2:
#獲取新一頁
pagestories = self.getpageitems(self.pageindex)
#將該頁的段子存放到全域性list中
if pagestories:
self.pageindex += 1
#呼叫該方法,每次敲回車列印輸出乙個段子
def getonestory(self,pagestories,page):
#遍歷一頁的段子
for story in pagestories:
#等待使用者輸入
input = raw_input("請按下任意鍵....")
#每當輸入回車一次,判斷一下是否要載入新頁面
self.loadpage()
#如果輸入q則程式結束
if input == "q" or input == u"q":
self.enable = false
return
print u"第%d頁\n發布內容:\n%s" %(page,story)
#開始方法
def start(self):
print u"正在讀取糗事百科,按回車檢視新段子,q退出"
#使變數為true,程式可以正常執行
self.enable = true
#先載入一頁內容
self.loadpage()
#區域性變數,控制當前讀到了第幾頁
nowpage = 0
while self.enable:
if len(self.stories)>0:
#從全域性list中獲取一頁的段子
pagestories = self.stories[0]
#當前讀到的頁數加一
nowpage += 1
#將全域性list中第乙個元素刪除,因為已經取出
del self.stories[0]
#輸出該頁的段子
self.getonestory(pagestories,nowpage)
spider = qsbk()
spider.start()
urlib2使用總結
urllib2是python的乙個獲取urls的元件。他以urlopen函式的形式提供了乙個非常簡單的介面,具有利用不同協議獲取urls的能力,同樣提供了乙個比較複雜的介面來處理一般情況。urllib2可用來完成以下功能 1.獲取web頁面 2.在遠端http伺服器上驗證 3.額外資料請求,如表單提...
python利用waitpid 處理殭屍程序
1.父程序列印父親後處於掛起狀態等待子程序完成所有命令後,父程序處理了子程序後在執行父程序的命令。import os import time re os.fork if re print 父親 result os.waitpid 1 0 0表示掛起父程序當子程序完成任務後父程序處理了子程序在執行父程...
利用python中的zipfile模組進行解壓縮
本文主要說解壓的問題 匯入模組 import zipfile 壓縮包所在路徑 file dir test.zip zf zipfie.zipfile file dir 檢視壓縮包內的檔案 以列表形式呈現 zf.namelist 將解壓的檔案儲存到指定的路徑下 zf.extractall some 匯...