爬取糗事百科,朗读段子

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

环境
python 2.7
mac os 10.12

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

朗读的代码

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

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

抓取数据

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 抓取某一页全部的数据
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的正则表达式,个人亲测应该没问题,如果有问题欢迎留言,我看到会改的。

1
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:点赞数

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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罪就太亏了
显示 Gitment 评论