码迷,mamicode.com
首页 > 其他好文 > 详细

糗事百科的段子

时间:2017-04-15 13:43:54      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:ret   取出   ade   pattern   调用   pen   windows   点赞   过滤   

#! usr/bin/env python
# -*- coding: utf-8 -*-

‘‘‘
1.抓取糗事百科热门段子
2.过滤带有图片的段子
3.实现每按一次回车显示一个段子的发布时间,发布人,段子内容,点赞数。
‘‘‘

import urllib2
import re

class QSBK(object):

def __init__(self):
self.pageIndex = 1
self.user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘

# 初始化headers
self.headers = {‘User-Agent‘:self.user_agent}
# 存放段子容器
self.stories = []
# 程序控制器
self.enable = True

# 传入某一索引页 获取代码
def getPage(self, pageIndex):
url = ‘http://www.qiushibaike.com/hot/page/‘ + str(pageIndex)
request = urllib2.Request(url, headers=self.headers)
try:
response = urllib2.urlopen(request)
pageCode = response.read().decode(‘utf-8‘)
return pageCode
except urllib2.URLError,e:
if hasattr(e,‘reason‘):
print u‘连接糗事百科错误‘,e.reason
return None

# 获取某一页不带图片的段子列表
def getPageItems(self, pageIndex):
pageCode = self.getPage(pageIndex)
pageStories = []
if not pageCode:
print ‘页面加载失败‘
return None
pattern = re.compile(‘<h2>(.+?)</h2>.*?<span>(.*?)</span>.*?<i .*?>(.*?)</i>.*?<i .*?>(.*?)</i>‘ ,re.S)
items = re.findall(pattern, pageCode)
for item in items:
pageStories.append([item[0].strip(),item[1].strip(),item[2].strip(),item[3].strip()])
return pageStories

# 加载并提取页面的内容,加入到列表中
def loadPage(self):
if self.enable == True:
if len(self.stories) < 2:
pageStroies = self.getPageItems(self.pageIndex)
if pageStroies:
self.stories.append(pageStroies)
self.pageIndex += 1

# 调用该方法,每次敲回车打印输出一个段子
def getOneStory(self,pageStories,page):
# 遍历一页的段子
for story in pageStories:
# 等待用户输入
input = raw_input()
# 每当输入回车一次,判断一下是否要加载新页面
self.loadPage()
# 如果输入Q则程序结束
if input == "Q":
self.enable = False
return
print ‘发帖人:‘,story[0]
print ‘内容:‘,story[1]
print ‘共%s人觉得很赞‘%int(story[2])
print ‘%s人进行了点评‘%int(story[3])
print ‘当前为糗事百科主页第%s页‘%page

# 开始方法
def start(self):
print u"正在读取糗事百科,按回车查看新段子,Q退出"
# 使变量为True,程序可以正常运行
self.enable = True
# 先加载一页内容
self.loadPage()
# 局部变量,控制当前读到了第几页
nowPage = 0
while self.enable:
if len(self.stories)>0:
# 从全局list中获取一页的段子
pageStories = self.stories[0]
# 当前读到的页数加一
nowPage += 1
# 将全局list中第一个元素删除,因为已经取出
del self.stories[0]
# 输出该页的段子
self.getOneStory(pageStories,nowPage)

spider = QSBK()
spider.start()

糗事百科的段子

标签:ret   取出   ade   pattern   调用   pen   windows   点赞   过滤   

原文地址:http://www.cnblogs.com/Emai76/p/6713780.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!