爬取糗事百科,朗读段子

一闲下来就不务正业了,写个爬虫,听段子。
额,mac自带的语音朗读,windows我就不知道啦,有兴趣的可以去研究一下哈。

环境
python 2.7
mac os 10.12

使用
下载代码,是一个.py的文本文件,打开终端,在这个文件所属的目录下输入python xxxxxx.py即可,根据提示进行选择

朗读的代码

from subprocess import call
call(['say', 'hello pengge'])

当然了,听起来并不是很顺耳,不过我听了好一会儿之后就习惯了,有种暴走漫画的感觉 = =!

抓取数据

使用了urllib2,添加一个header就可以啦

# 抓取某一页全部的数据
try:
    url = 'http://www.qiushibaike.com/hot/page/' + str(pageIndex)
    user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0)'
    headers = { 'User-Agent' : user_agent }
    request = urllib2.Request(url, headers = headers)
    response = urllib2.urlopen(request)
    return response.read().decode('utf-8')
except urllib2.URLError, e:
    if hasattr(e,"reason"):
        print '--------------------------'
        print u"连接糗事百科失败,错误原因:\n",e.reason
        print '--------------------------'
        return None

解析数据
主要用到了正则表达式去匹配想要的内容,苦逼的是网页一改版,之前写的正则表达式可能就不能用了,然后导致爬取失败,此时应该使用curl+z停止爬虫程序,重新编写正则表达式。
同样作用的正则表达式并不一定唯一,只要能正确匹配出来就好,下面是2017.03.10的正则表达式,个人亲测应该没问题,如果有问题欢迎留言,我看到会改的。

pattern = re.compile('<div.*?author clearfix">.*?<a href.*?<h2>(.*?)</h2>.*?<div.*?content">.*?<span>(.*?)</span>.*?</a>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)

匹配出了 0:作者,1:文字内容,2:图片,3:点赞数

程序开始时选择选项
选择是展示还是朗读,展示要每次按键,展示一条,朗读则是自动,一条一条无限朗读,好在朗读是个同步的方法,省去自己好多时间

print '抓取糗事百科,Q退出'
        print '需要自动朗读吗?Y/N'
        while True:
            input = raw_input()
            if input == "Y" or input == "y":
                self.voice = True
                print '已经选择自动朗读,curl + z 退出'
                break;
            elif input == "N" or input == "n":
                self.voice = False
                break;
            else:
                print '只能输入 Y/N'

        self.stop = False
        self.getNewPage()
        self.showStory()

结束语
1. 点击下载源代码
2. 欢迎高手指点评论,求老司机带我飞!
3. 本来是想爬点老司机论坛的,最近开两会,万一被抓了,搞个传播xx罪就太亏了

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值