import urllib.request
import re
# 糗事百科爬蟲類
class sqbk:
def __init__(self):
self.pageindex = 1
self.user_agent = 'mozilla/4.0 (compatible; msie 5.5; windows nt)'
# initial headers
self.headers =
# 存放段子, 每乙個元素為每一頁的段子
self.storages =
# if continue running
self.enable = false
# 傳入索引, 獲取頁面**
def getpage(self, pageindex):
try:
url = '' + str(pageindex)
# 構建請求的 request
reqst = urllib.request.request(url, headers=self.headers)
# 利用 urlopen 獲取頁面**
with urllib.request.urlopen(reqst) as response:
# 將頁面轉化為 utf-8 編碼
pagecode = response.read().decode('utf-8')
return pagecode
except urllib.request.urlerror as e:
if hasattr(e, 'reason'):
print('連線糗事百科失敗, 錯誤原因: ', e.reason)
return none
# 傳入索引, 獲取本頁段子列表
def getpageitems(self, pageindex):
pagecode = self.getpage(pageindex)
if not pagecode:
print('頁面載入失敗...')
return none
pattern = re.compile('author.*?.*?contentherf.*?(.*?)' +
'.*?.*?class="number">(.*?).*?
', re.s)
items = re.findall(pattern, pagecode)
# 儲存每個獲取到的段子
pagestorage =
for item in items:
# 替換段子內容中的換行符
br = re.compile('
') text = re.sub(br, '\n', item[1])
# 去掉空白符加入 pagestorage
# strip 預設刪除頭尾空白符(包括'\n', '\r', '\t', ' ')
return pagestorage
# 載入並提取頁面內容, 放到 storages 列表中
def loadpage(self):
#如果當前未看的頁數少於 2 頁, 則載入新一頁
if self.enable == true:
if len(self.storages) < 2:
# 獲取新的一頁
pagestorage = self.getpageitems(self.pageindex)
if pagestorage:
self.pageindex += 1
# 每次列印乙個段子
def getonestory(self, pagestorage, page):
for story in pagestorage:
choose = input()
# 載入新頁面 ?
self.loadpage()
if 'q' == choose:
self.enable = false
return
print('第%d頁 %s贊. %s: \n%s *\n' % (page, story[1], story[0], story[2]))
# start
def start(self):
print('糗事百科獲取中... q 結束')
self.enable = true
self.loadpage()
nowpage = 0
while self.enable:
if len(self.storages) > 0:
# 獲取一頁的段子
pagestories = self.storages[0]
nowpage += 1
# 將 storages 第乙個元素以取出的元素刪除
del self.storages[0]
self.getonestory(pagestories, nowpage)
if __name__ == '__main__':
spider = sqbk( )
spider.start()
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...
Python 爬取糗事百科
coding utf 8 import urllib2 import urllib import re class qiushi def init self self.page 1 從網頁獲取糗事 def getqiushis self,page url page 偽裝瀏覽器 user agent ...