Python - 静态页面抓取(抓取‘糗事百科’段子)

问题导读:


抓取糗事百科段子,作者、作者性别、段子内容、筛选无图段子


解决方案:


#!/usr/bin/env python
# coding=utf-8
import urllib2
import re
# 爬虫
class qsbk_spider:
    #初始化
    def __init__(self):
        self.pageIndex = 1
        self.headers = { 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0' }
        # 段子
        self.stories = []
        # 程序运行标量
        self.enable = False
    # 通过索引获得页面html
    def getPageByIndex(self, pageIndex):
        try:
            url = 'http://www.qiushibaike.com/hot/page/' + str(pageIndex)
            # 构建Request 请求
            request = urllib2.Request(url,headers = self.headers)
            # 得到html
            response = urllib2.urlopen(request)
            # 转码
            page_html = response.read().decode('utf-8')
            return page_html
        except urllib2.URLError, e:
            if hasattr(e,'reason'):
                print u'连接失败,错误:',e.reason
                return None
    # 通过html页面,返回不带img的段子列表
    def getPageExceptImg(self, pageIndex):
        page_html = self.getPageByIndex(pageIndex)
        if not page_html:
            print '页面加载失败!'
            return None
        pattern = re.compile(r'<h2>(.*?)</h2>.*?</a(.*?)<span>(.*?)</span>.*?</div.*?</a(.*?)class="stats">', re.S)
        items = re.findall(pattern,page_html)
        # 保存页面的列表
        page_storie = []
        # 遍历匹配到item
        for item in items:
            # 没有img
            if not re.search('img',item[3]):
                if re.search('manIcon',item[1]):
                    a_sex = '(男孩)'
                else:
                    a_sex = '(女孩)'
                # 替换<br/> 标签
                '''
                compile:
                把正则表达式的模式和标识转化成正则表达式对象,供函数使用。
                '''
                replaceBR = re.compile('<br/>')
                text = re.sub(replaceBR,'\n',item[2])
                # a_sex 是作者性别,将它存入列表时要解码
                page_storie.append([item[0].strip(),a_sex.decode('utf-8'),text.strip()])
        return page_storie
    # 输入页数,得到每一页的段子
    def getStories(self):
        start = input('开始页:')
        end = input('结束页:')
        while(start <= end):
            print start,
            self.stories.append(self.getPageExceptImg(self.pageIndex))
            start += 1
    # 写入 ./qb_file.txt 
    def writeToFile(self):
        print '保存中---',
        qb_file = open('./qb_file.txt','w')
        for story in self.stories:
            for s in story:
                qb_file.write('作者:' + s[0].encode("utf-8") + s[1].encode("utf-8") + '\n' + '段子:' + s[2].encode("utf-8") + '\n')
        qb_file.close()
        print '已保存!'
    # 开始 
    def start(self):
        self.getStories()
        self.writeToFile()
#开始 
if __name__ == "__main__":
    spider = qsbk_spider()
    spider.start()


作者:逆风的单车(男孩)
段子:前段时间,主管找到我,偷偷对我说“小x你工作表现的不错,工资准备给你涨三百,这事你千万不能告诉别人”我感激涕零,直到聚餐的时候,主管喝多了,拉着我的手“小x,我对不住你,其实别人都涨了六百,怕你想不开,就没和你说实话!”卧槽!!!
作者:告诉静静说我想她(男孩)
段子:买了一个小蛋糕(真的很小),上面有一朵花,花边一颗草。那草做的那个精致啊,真像真的。吃下去,我草,是真的!
作者:海贼--王路飞(男孩)
段子:一同事单身,周末洗了一堆衣服,发朋友圈说累死了,真得找个媳妇!数位已婚男同胞回复:洗的少了不过瘾?
作者:爱上你却输了骄傲(女孩)
段子:LZ是朋友圈里有名的红娘,介绍了三对,都成功了,之后好多人纷纷都找我介绍。自从去年那三对都离婚了之后,整个世界就安静了……并送我一个外号“婚姻中转站站长”
作者:专业^O^丰胸(男孩)
段子:二货的朋友伤不起。在广场上打赌,一朋友输了,罚他和大妈们跳广场舞。各种不愿意,扭捏之后就去跳了。然后跳的嗨了,拉都拉不走!!服了~




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PeersLee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值