文档章节

基于Python的一个简单爬虫(糗事百科爬虫)

小竹zz
 小竹zz
发布于 2014/09/10 12:53
字数 459
阅读 19
收藏 1
# -*- coding: utf-8 -*-
import urllib2
from bs4 import BeautifulSoup
import thread
import time
class qiushibaike:
    """docstring for ClassName"""
    def __init__(self):
        self.page = 1   #下载了的页数
        self.pages = [] #保存已下载的html
        self.enable = False #标志位
        self.url='http://m.qiushibaike.com/hot/page/'
    # 用于加载新的页面
    def LoadPage(self):
        # 如果用户未输入quit则一直运行
        while self.enable:
            # 如果pages数组中的内容小于5个
            if len(self.pages) < 5:
                try:
                    # 获取新的页面,加入到数组中
                    url=self.url+str(self.page)
                    newPage = self.GetHtml(url)
                    self.page += 1
                    self.pages.append(newPage)
                except:
                    print '无法链接糗事百科!'
            else:
                time.sleep(1)
    
    def ParseHtml(self,html):
        items=self.GetContenBlock(html)
        for item in items:
            content=self.ParseContent(item)
            try:
                print u"作者",content['author'],u"时间:",content["time"]
                print content["content"]
                print '------------------------------------------'
            except:
                print u'尼玛这样都有错啊!'
            
    #用来获取html
    def GetHtml(self,url):
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
        headers = { 'User-Agent' : user_agent } 
        req = urllib2.Request(url,None,headers)  
        response = urllib2.urlopen(req)  
        html = response.read()
        return html
    def GetContenBlock(self,html):
        soup = BeautifulSoup(str(html))
        items=soup.findAll('div',{'class':'article block untagged mb15'})
        return items;

    def ParseContent(self,item):
        #soup = BeautifulSoup(str(item))
        content=item.find('div',{'class':'content'})
        result={}
        if content!=None:
            try:
                result["content"]=content.text.strip()
                result["time"]=content.get("title").strip()
            except:
                result["content"]=None
                result["time"]=None
        else:
            result["content"]=None
            result["time"]=None
        #author=item.find('div',{'class':'author clearfix'})
        #if author!=None:
        #    result["author"]=author.findAll('a')[1].string
        #else:
        #    result["author"]=None
        result['author']=self.ParseAuthor(item)
        return result;

    def ParseAuthor(self,item):
        try:
            #soup = BeautifulSoup(str(item))
            item=item.find('div',{'class':'author clearfix'})
            if item!=None:
                return item.findAll('a')[1].text
            else:
                return None;
        except:
            return None;
        
    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.ParseHtml(nowPage)
                page += 1

print u"""
---------------------------------------
   程序:糗百爬虫
   版本:0.1
   作者:zz
   日期:2013-05-15
   语言:Python 2.7
   功能:按下回车依次浏览今日的糗百热点
---------------------------------------
"""


print u'请按下回车浏览今日的糗百内容:'
raw_input(' ')
myModel = qiushibaike()
myModel.Start()

© 著作权归作者所有

小竹zz
粉丝 4
博文 34
码字总数 35733
作品 2
普陀
私信 提问
加载中

评论(1)

yoyoso
yoyoso
怎么保存图片呢?
分享我自己写的一套Python爬虫学习经验

最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多。学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴...

崔庆才
2015/02/23
4K
25
Ubuntu16.04下Scrapy环境的搭建

一、Scrapy简介与部署环境 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的第三方爬虫框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 最初是为了页面抓取...

dyc2005
2017/10/24
0
0
Python爬虫--抓取糗事百科段子

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

周东尧
2016/08/22
220
1
Python爬虫框架Scrapy架构和爬取糗事百科段子结果

根据上篇文章《Python爬虫框架Scrapy之爬取糗事百科大量段子数据》(传送门:Python爬虫框架Scrapy之爬取糗事百科大量段子数据),写好了糗百段子的爬虫,接下来就是开始运行然后获取结果了。...

铁扇公主1
2017/05/24
224
0
总结最近学习的如何编写gtalk机器人

只能说开放的协议给我们了太多可能, 加phzggzs@gmail.com发送 -qsbk 可获取最新的糗事百科 闲话少说: 使用python库 简单的代码

旧城的骁珖
2011/09/25
621
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
421
7
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
11
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部