# -*- coding: utf-8 -*-
import urllib2
import urllib
import re
import thread
import time
#----------- 加载处理糗事百科 -----------
class Spider_Model:
def __init__ ( self ) :
self .page = 1
self .pages = [ ]
self .enable = False
# 将所有的段子都扣出来,添加到列表中并且返回列表
def GetPage( self , page) :
myUrl = "http://m...content-available-to-author-only...e.com/hot/page/" + page
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
req = urllib2 .Request ( myUrl, headers = headers)
myResponse = urllib2 .urlopen ( req)
myPage = myResponse.read ( )
#encode的作用是将unicode编码转换成其他编码的字符串
#decode的作用是将其他编码的字符串转换成unicode编码
unicodePage = myPage.decode ( "utf-8" )
# print unicodePage
# 找出所有class="content"的div标记
#re.S是任意匹配模式,也就是.可以匹配换行符
myItems = re .findall ( '<div.*?class="content".*?title="(.*?)">(.*?)</div>' , unicodePage, re .S )
items = [ ]
for item in myItems:
# item 中第一个是div的标题,也就是时间
# item 中第二个是div的内容,也就是内容
items.append ( [ item[ 0 ] .replace ( "\n " , "" ) , item[ 1 ] .replace ( "\n " , "" ) ] )
return items
# 用于加载新的段子
def LoadPage( self ) :
# 如果用户未输入quit则一直运行
while self .enable :
# 如果pages数组中的内容小于2个
if len ( self .pages ) < 2 :
try :
# 获取新的页面中的段子们
myPage = self .GetPage ( str ( self .page ) )
self .page += 1
self .pages .append ( myPage)
except :
print '无法链接糗事百科!'
else :
time .sleep ( 1 )
def ShowPage( self , nowPage, page) :
for items in nowPage:
print u'第%d页' % page , items[ 0 ] , items[ 1 ]
myInput = raw_input ( )
if myInput == "quit" :
self .enable = False
break
def Start( self ) :
self .enable = True
page = self .page
print u'正在加载中请稍候......'
# 新建一个线程在后台加载段子并存储
thread .start_new_thread ( self .LoadPage , ( ) )
#----------- 加载处理糗事百科 -----------
while self .enable :
# 如果self的page数组中存有元素
if self .pages :
nowPage = self .pages [ 0 ]
del self .pages [ 0 ]
self .ShowPage ( nowPage, page)
page += 1
#----------- 程序的入口处 -----------
print u"""
---------------------------------------
程序:糗百爬虫
版本:0.3
作者:why
日期:2014-06-03
语言:Python 2.7
操作:输入quit退出阅读糗事百科
功能:按下回车依次浏览今日的糗百热点
---------------------------------------
"""
print u'请按下回车浏览今日的糗百内容:'
raw_input ( ' ' )
myModel = Spider_Model( )
myModel.Start ( )
IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0gIAogICAKaW1wb3J0IHVybGxpYjIgIAppbXBvcnQgdXJsbGliICAKaW1wb3J0IHJlICAKaW1wb3J0IHRocmVhZCAgCmltcG9ydCB0aW1lICAKCiAgCiMtLS0tLS0tLS0tLSDliqDovb3lpITnkIbns5fkuovnmb7np5EgLS0tLS0tLS0tLS0gIApjbGFzcyBTcGlkZXJfTW9kZWw6ICAKICAgICAgCiAgICBkZWYgX19pbml0X18oc2VsZik6ICAKICAgICAgICBzZWxmLnBhZ2UgPSAxICAKICAgICAgICBzZWxmLnBhZ2VzID0gW10gIAogICAgICAgIHNlbGYuZW5hYmxlID0gRmFsc2UgIAogIAogICAgIyDlsIbmiYDmnInnmoTmrrXlrZDpg73miaPlh7rmnaXvvIzmt7vliqDliLDliJfooajkuK3lubbkuJTov5Tlm57liJfooaggIAogICAgZGVmIEdldFBhZ2Uoc2VsZixwYWdlKTogIAogICAgICAgIG15VXJsID0gImh0dHA6Ly9tLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS9ob3QvcGFnZS8iICsgcGFnZSAgCiAgICAgICAgdXNlcl9hZ2VudCA9ICdNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA1LjU7IFdpbmRvd3MgTlQpJyAKICAgICAgICBoZWFkZXJzID0geyAnVXNlci1BZ2VudCcgOiB1c2VyX2FnZW50IH0gCiAgICAgICAgcmVxID0gdXJsbGliMi5SZXF1ZXN0KG15VXJsLCBoZWFkZXJzID0gaGVhZGVycykgCiAgICAgICAgbXlSZXNwb25zZSA9IHVybGxpYjIudXJsb3BlbihyZXEpCiAgICAgICAgbXlQYWdlID0gbXlSZXNwb25zZS5yZWFkKCkgIAogICAgICAgICNlbmNvZGXnmoTkvZznlKjmmK/lsIZ1bmljb2Rl57yW56CB6L2s5o2i5oiQ5YW25LuW57yW56CB55qE5a2X56ym5LiyICAKICAgICAgICAjZGVjb2Rl55qE5L2c55So5piv5bCG5YW25LuW57yW56CB55qE5a2X56ym5Liy6L2s5o2i5oiQdW5pY29kZee8lueggSAgCiAgICAgICAgdW5pY29kZVBhZ2UgPSBteVBhZ2UuZGVjb2RlKCJ1dGYtOCIpICAKICAgICAgICAjIHByaW50IHVuaWNvZGVQYWdlCgogICAgICAgICMg5om+5Ye65omA5pyJY2xhc3M9ImNvbnRlbnQi55qEZGl25qCH6K6wICAKICAgICAgICAjcmUuU+aYr+S7u+aEj+WMuemFjeaooeW8j++8jOS5n+WwseaYry7lj6/ku6XljLnphY3mjaLooYznrKYgIAogICAgICAgIG15SXRlbXMgPSByZS5maW5kYWxsKCc8ZGl2Lio/Y2xhc3M9ImNvbnRlbnQiLio/dGl0bGU9IiguKj8pIj4oLio/KTwvZGl2PicsdW5pY29kZVBhZ2UscmUuUykgIAogICAgICAgIGl0ZW1zID0gW10gIAogICAgICAgIGZvciBpdGVtIGluIG15SXRlbXM6ICAKICAgICAgICAgICAgIyBpdGVtIOS4reesrOS4gOS4quaYr2RpdueahOagh+mimO+8jOS5n+WwseaYr+aXtumXtCAgCiAgICAgICAgICAgICMgaXRlbSDkuK3nrKzkuozkuKrmmK9kaXbnmoTlhoXlrrnvvIzkuZ/lsLHmmK/lhoXlrrkgIAogICAgICAgICAgICBpdGVtcy5hcHBlbmQoW2l0ZW1bMF0ucmVwbGFjZSgiXG4iLCIiKSxpdGVtWzFdLnJlcGxhY2UoIlxuIiwiIildKSAgCiAgICAgICAgcmV0dXJuIGl0ZW1zICAKICAKICAgICMg55So5LqO5Yqg6L295paw55qE5q615a2QICAKICAgIGRlZiBMb2FkUGFnZShzZWxmKTogIAogICAgICAgICMg5aaC5p6c55So5oi35pyq6L6T5YWlcXVpdOWImeS4gOebtOi/kOihjCAgCiAgICAgICAgd2hpbGUgc2VsZi5lbmFibGU6ICAKICAgICAgICAgICAgIyDlpoLmnpxwYWdlc+aVsOe7hOS4reeahOWGheWuueWwj+S6jjLkuKogIAogICAgICAgICAgICBpZiBsZW4oc2VsZi5wYWdlcykgPCAyOiAgCiAgICAgICAgICAgICAgICB0cnk6ICAKICAgICAgICAgICAgICAgICAgICAjIOiOt+WPluaWsOeahOmhtemdouS4reeahOauteWtkOS7rCAgCiAgICAgICAgICAgICAgICAgICAgbXlQYWdlID0gc2VsZi5HZXRQYWdlKHN0cihzZWxmLnBhZ2UpKSAgCiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWdlICs9IDEgIAogICAgICAgICAgICAgICAgICAgIHNlbGYucGFnZXMuYXBwZW5kKG15UGFnZSkgIAogICAgICAgICAgICAgICAgZXhjZXB0OiAgCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ+aXoOazlemTvuaOpeezl+S6i+eZvuenke+8gScgIAogICAgICAgICAgICBlbHNlOiAgCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpICAKICAgICAgICAgIAogICAgZGVmIFNob3dQYWdlKHNlbGYsbm93UGFnZSxwYWdlKTogIAogICAgICAgIGZvciBpdGVtcyBpbiBub3dQYWdlOiAgCiAgICAgICAgICAgIHByaW50IHUn56ysJWTpobUnICUgcGFnZSAsIGl0ZW1zWzBdICAsIGl0ZW1zWzFdICAKICAgICAgICAgICAgbXlJbnB1dCA9IHJhd19pbnB1dCgpICAKICAgICAgICAgICAgaWYgbXlJbnB1dCA9PSAicXVpdCI6ICAKICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlID0gRmFsc2UgIAogICAgICAgICAgICAgICAgYnJlYWsgIAogICAgICAgICAgCiAgICBkZWYgU3RhcnQoc2VsZik6ICAKICAgICAgICBzZWxmLmVuYWJsZSA9IFRydWUgIAogICAgICAgIHBhZ2UgPSBzZWxmLnBhZ2UgIAogIAogICAgICAgIHByaW50IHUn5q2j5Zyo5Yqg6L295Lit6K+356iN5YCZLi4uLi4uJyAgCiAgICAgICAgICAKICAgICAgICAjIOaWsOW7uuS4gOS4que6v+eoi+WcqOWQjuWPsOWKoOi9veauteWtkOW5tuWtmOWCqCAgCiAgICAgICAgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoc2VsZi5Mb2FkUGFnZSwoKSkgIAogICAgICAgICAgCiAgICAgICAgIy0tLS0tLS0tLS0tIOWKoOi9veWkhOeQhuezl+S6i+eZvuenkSAtLS0tLS0tLS0tLSAgCiAgICAgICAgd2hpbGUgc2VsZi5lbmFibGU6ICAKICAgICAgICAgICAgIyDlpoLmnpxzZWxm55qEcGFnZeaVsOe7hOS4reWtmOacieWFg+e0oCAgCiAgICAgICAgICAgIGlmIHNlbGYucGFnZXM6ICAKICAgICAgICAgICAgICAgIG5vd1BhZ2UgPSBzZWxmLnBhZ2VzWzBdICAKICAgICAgICAgICAgICAgIGRlbCBzZWxmLnBhZ2VzWzBdICAKICAgICAgICAgICAgICAgIHNlbGYuU2hvd1BhZ2Uobm93UGFnZSxwYWdlKSAgCiAgICAgICAgICAgICAgICBwYWdlICs9IDEgIAogIAogIAojLS0tLS0tLS0tLS0g56iL5bqP55qE5YWl5Y+j5aSEIC0tLS0tLS0tLS0tICAKcHJpbnQgdSIiIiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICDnqIvluo/vvJrns5fnmb7niKzomasgCiAgIOeJiOacrO+8mjAuMyAKICAg5L2c6ICF77yad2h5IAogICDml6XmnJ/vvJoyMDE0LTA2LTAzIAogICDor63oqIDvvJpQeXRob24gMi43IAogICDmk43kvZzvvJrovpPlhaVxdWl06YCA5Ye66ZiF6K+757OX5LqL55m+56eRIAogICDlip/og73vvJrmjInkuIvlm57ovabkvp3mrKHmtY/op4jku4rml6XnmoTns5fnmb7ng63ngrkgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKIiIiCiAgCiAgCnByaW50IHUn6K+35oyJ5LiL5Zue6L2m5rWP6KeI5LuK5pel55qE57OX55m+5YaF5a6577yaJyAgCnJhd19pbnB1dCgnICcpICAKbXlNb2RlbCA9IFNwaWRlcl9Nb2RlbCgpICAKbXlNb2RlbC5TdGFydCgpICAK