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