#coding:utf-8
import urllib2
import re
# 工具类
class Tools(object):remove_n = re.compile(r'\n')replace_br = re.compile(r'<br>|<br>')remove_ele = re.compile(r'<.*?>', re.S)#rs 参数,要进行替换的数据
    def replace_rs(self,rs):name = re.sub(self.remove_n, '', rs[0])content = re.sub(self.remove_n, '', rs[2])content = re.sub(self.replace_br, r'\n', content)content = re.sub(self.remove_ele, '', content)dz_tuple = (name, rs[1], content, rs[3], rs[4])# 返回处理后的元组
        return dz_tuple
#糗事百科爬虫类
class QSBK(object):'''
    1.根据url地址获取网页源代码
    2.从网页源代码中提取想要的数据
    3.存储或展示数据
    '''
    #把爬虫需要的基础设置进行初始化
    def __init__(self):#爬虫基础url地址,不包含参数部分
        self.baseURL = 'https://www.qiushibaike.com/hot/page'
        #请求头
        self.headers = {'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
        }# 创建一个Tools对象,把对象赋值self的tool属性
        # 在整个爬虫的过程中,只创建一个Tools工具类的对象
        self.tool = Tools()#根据页码获取HTML源代码
    def get_page(self,num):#1、根据num拼接完整的URL地址
        #str()转化为字符串,int()转换为整数
        url = self.baseURL+str(num)#2.创建request对象
        request=urllib2.Request(url,headers=self.headers)# 3. 发起请求,接收响应
        try:response = urllib2.urlopen(request)except (urllib2.URLError,Exception),e:print '连接糗事百科失败,原因:%s'%e#获取失败,返回None
            return None
        else:# 返回页码对应的HTMl源代码
            return response.read()#从一段html源代码中获取数据
    def get_data(self,html):# 1.准备正则表达式
        pattern = re.compile(r'<div class="author clearfix">.*?<h2>(.*?)</h2>.*?Icon">(.*?)</div>.*?class="content">(.*?)</span>.*?<i class="number">(.*?)</i>.*?<i class="number">(.*?)</i>',re.S)# 2.根据正则表达式筛选数据
        results = re.findall(pattern, html)# 准备列表,存放处理后的数据
        rs_data =[]# 3.处理筛选出的数据
        for rs in results:dz_tuple = self.tool.replace_rs(rs)# 把元组放在列表中
            rs_data.append(dz_tuple)# 4.返回处理后的数据
        return rs_data#对象函数,开始爬虫
    def start(self):#1.根据某一页页码,获取该页的HTML源代码
        html = self.get_page(1)# 2.如果获取到的html源代码不为None,则从源代码中提取数据
        if html == None:return
        rs_data = self.get_data(html)for rs in rs_data:s = raw_input('敲击回车查看下一条段子,输入Q结束:')if s == 'Q':print '程序结束!'
                break
            print '用户名:%s 年龄:%s 好笑数:%s 评论数:%s'%(rs[0],rs[1],rs[3],rs[4])print rs[2]print '\n'
if __name__ == '__main__':#创建QSBK对象
    qsbk = QSBK()qsbk.start()

python爬虫糗事百科相关推荐

  1. 正则表达式re模式(python爬虫糗事百科热点段子)

    python编程快速上手(持续更新中-) python爬虫从入门到精通 文章目录 python编程快速上手(持续更新中-) python爬虫从入门到精通 非结构化数据与结构化数据提取 概述 非结构化的 ...

  2. python多线程爬取段子_Python爬虫实例-多线程爬虫糗事百科搞笑内涵段子

    学习爬虫,其乐无穷! 今天给大家带来一个爬虫案例,爬取糗事百科搞笑内涵段子. 爬取糗事百科段⼦,假设⻚⾯的 URL 是:http://www.qiushibaike.com/8hr/page/1 一. ...

  3. python多线程糗事百科案例

    案例:多线程爬虫 目标:爬取糗事百科段子,待爬取页面URL:http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPATH/re 做 ...

  4. (python)查看糗事百科文字 点赞 作者 等级 评论

    import requests import re headers = { 'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6. ...

  5. Python爬虫 基于Beautiful Soup的糗事百科爬虫

    python爬虫 ---- 糗事百科爬虫 首先进入糗事百科官网首页 -> 糗事百科 本次爬虫的目标是翻页爬取糗事百科的信息,包括 标题, 链接, 作者名, 好笑数&评论数 之后右键检查, ...

  6. python爬虫案例——糗事百科数据采集

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python爬虫案例--糗事百科数据采集 通过python实现糗事百科页面的内容采集是相对来说比较容易的,因为糗事百科不需要登陆,不需要coo ...

  7. Python爬虫--抓取糗事百科段子

    今天使用python爬虫实现了自动抓取糗事百科的段子,因为糗事百科不需要登录,抓取比较简单.程序每按一次回车输出一条段子,代码参考了 http://cuiqingcai.com/990.html 但该 ...

  8. Python爬虫实战(1):爬取糗事百科段子

    Python爬虫入门(1):综述 Python爬虫入门(2):爬虫基础了解 Python爬虫入门(3):Urllib库的基本使用 Python爬虫入门(4):Urllib库的高级用法 Python爬虫 ...

  9. python爬虫经典段子_Python爬虫实战(1):爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

最新文章

  1. Ueditor编辑旧文章,从数据库中取出要修改的内容
  2. 【MongoDB】5.MongoDB与java的简单结合
  3. 改变状态栏的背景色和文字的颜色
  4. 在iframe内页触发顶层页面body的blur事件
  5. android service中显示一个dialog
  6. 性能比拼!超详细的Tengine GEMM矩阵乘法汇编教程
  7. 【英语学习】【WOTD】imbroglio 释义/词源/示例
  8. 数据科学入门与实战:玩转pandas之五
  9. 快速上手系列:传智播客Java基础笔记
  10. 80X86CPU独立编址方式的两种寻址方式——直接寻址直接写和间接寻址DX
  11. mysql 修改多表数据库_mysql数据库:mysql增删改、单表、多表及子查询
  12. mw150um 驱动程序win10_水星MW150UM无线网卡驱动下载-水星MW150UM 1.0无线网卡驱动官方版下载[电脑版]-华军软件园...
  13. 统一网关Gateway
  14. 计算机办公软件应用英文,办公软件用英语怎么说英文表达
  15. 特种光纤所需学习知识(光纤光学)
  16. mac外接竖屏显示器
  17. 现代信号处理——平稳随机信号通过线性系统
  18. 计算机图形学-光线追踪学习
  19. mysql 字符集 对勾_css如何在菜单上实现对勾?(代码)
  20. transporter上传卡正在交付_Transporter上传卡在——正在验证 APP - 正在通过App Store进行认证...

热门文章

  1. C++模板类声明和定义几种写法
  2. AI目标分割能力,无需绿幕即可实现快速视频抠图
  3. 如何使用快捷键在网页中调用扫描仪进行扫描 - Dynamic Web TWAIN
  4. P1786帮贡排序题解
  5. 条码标签打印软件导入Excel批量打印标签
  6. 在树莓派上定时播放语音
  7. 安卓Android/微信小程序的驾校考试预约管理系统APP
  8. 学习kettle插件
  9. 《孙子兵法》之谋攻篇
  10. 三菱5u 上位机mc协议_上位机读写三菱plc fx5u的内存数据示例