python3糗事百科爬取

2021-08-13 03:32:21 字數 2564 閱讀 2229

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 ...