Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166865
  • 博文数量: 47
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 466
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-31 23:12
个人简介

知乎:http://www.zhihu.com/people/chanpinjinglizhilu

文章分类

全部博文(47)

分类: Python/Ruby

2015-01-13 14:26:54


  1. # -*- coding: utf-8 -*-
  2.    
  3. import urllib2
  4. import urllib
  5. import re
  6. import thread
  7. import time

  8.   
  9. #----------- 加载处理糗事百科 -----------
  10. class Spider_Model:
  11.       
  12.     def __init__(self):
  13.         self.page = 1
  14.         self.pages = []
  15.         self.enable = False
  16.   
  17.     # 将所有的段子都扣出来,添加到列表中并且返回列表
  18.     def GetPage(self,page):
  19.         myUrl = "" + page
  20.         user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
  21.         headers = { 'User-Agent' : user_agent }
  22.         req = urllib2.Request(myUrl, headers = headers)
  23.         myResponse = urllib2.urlopen(req)
  24.         myPage = myResponse.read()
  25.         #encode的作用是将unicode编码转换成其他编码的字符串
  26.         #decode的作用是将其他编码的字符串转换成unicode编码
  27.         unicodePage = myPage.decode("utf-8")
  28.   
  29.         # 找出所有class="content"的div标记
  30.         #re.S是任意匹配模式,也就是.可以匹配换行符
  31.         myItems = re.findall('(.*?)
',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()


  • 阅读(1244) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~