python 爬取糗事百科

2021-07-25 04:39:57 字數 4754 閱讀 8072

step 1:構建乙個提取糗事百科笑話的函式

import urllib2    

import urllib

import re

import thread

import time

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

defgetpage

(page):

myurl = ""+ str(page) + "/?s=4936484"

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

unicodepage = mypage.decode("utf-8")

myitems = re.findall('.*?(.*?).*?

',unicodepage,re.s)

items=

for item in myitems:

print item + '\n'

#return items

if __name__=="__main__":

a=getpage(2)

print a

step 2:構建乙個獲得糗事百科笑話的類,並保證每次讀取到的有2個頁面的內容。

tips:如有報錯,注意下縮排關係

import urllib2    

import urllib

import re

import thread

import time

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

class

spider_qs:

def__init__

(self):

self.page = 1

self.pages =

self.enable = true

#將每一頁的段子提取出來,新增到列表中並且返回列表

defgetpage

(self,page):

myurl = ""+ str(page) + "/?s=4936484"

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

unicodepage = mypage.decode("utf-8")

myitems = re.findall('.*?(.*?).*?

',unicodepage,re.s)

items=

for item in myitems:

#print item + '\n'

return items

#用於載入新的段子,保證self.pages裡面有2頁的爬取內容

defloadpage

(self):

# 如果使用者未輸入quit則一直執行

while self.enable:

# 如果pages陣列中的內容小於2個

if len(self.pages) < 2:

try:

# 獲取新的頁面中的段子們,從第1頁開始

mypage = self.getpage(self.page)

self.page += 1

except:

print

'無法鏈結糗事百科!'

else:

time.sleep(1)

return self.pages

if __name__=="__main__":

a=spider_qs()

b=a.loadpage()

print b

step 3:構建乙個完整的爬蟲程式

tips:執行緒的用法不太會

import urllib2    

import urllib

import re

import thread

import time

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

class

spider_qs:

def__init__

(self):

self.page = 1

self.pages =

self.enable = false

#將每一頁的段子提取出來,新增到列表中並且返回列表

defgetpage

(self,page):

myurl = ""+ str(page) + "/?s=4936484"

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

unicodepage = mypage.decode("utf-8")

myitems = re.findall('.*?(.*?).*?

',unicodepage,re.s)

items=

for item in myitems:

#print item + '\n'

return items

#用於載入新的段子,保證self.pages裡面有2頁的爬取內容

defloadpage

(self):

# 如果使用者未輸入quit則一直執行

while self.enable:

# 如果pages陣列中的內容小於2個

if len(self.pages) < 2:

try:

# 獲取新的頁面中的段子們,從第1頁開始

mypage = self.getpage(self.page)

self.page += 1

except:

print

'無法鏈結糗事百科!'

else:

time.sleep(1)

return self.pages

#啟動該類

defstart

(self):

self.enable = true

page = self.page #為1

print

u'正在載入中請稍候......'

# 新建乙個執行緒在後台載入段子並儲存

thread.start_new_thread(self.loadpage,()) #help(thread.start_new_thread)

#----------- 載入處理糗事百科 -----------

while self.enable:

# 如果self的page陣列中存有元素

if self.pages:

nowpage = self.pages[0] #[【】,【】],將第乙個列表賦值給nowpage

del self.pages[0] #刪除self.pages,則loadpage函式將繼續往第3頁讀取段子

self.showpage(nowpage,page)

page += 1

defshowpage

(self,nowpage,page):

for items in nowpage:

print

u'第%d頁' % page , items

myinput = raw_input()

if myinput == "quit": #輸入quit,則退出程式。否則按任意鍵都能繼續

self.enable = false

break

if __name__=="__main__":

print

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

raw_input('') #此處輸入回車鍵即可不斷往下讀取糗百段子

a=spider_qs()

myqb=a.start()

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

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