一直以来对python特别感兴趣,但却没有一个目标去好好学习这门语言。昨天突然有个想法,老爸喜欢买七星彩,为何不抓取每一期的开奖号码,通过邮件推送给他呢。这样他既能第一时间知道开奖号码了。
然后就动手开干,但是为什么选择python,其实用php我写得更快一些。还是因为看了点python没有机会实践,或者说懒得去实践大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!。
本次实例安装标题,将每一个方法拆分出来说明,同时这也是开发过程中的思路。
在动手之前需要了解一些将要抓取页面的结构。
目标地址:http://caipiao.163.com/award/qxc/
网站编码是utf-8,下面开始进入代码。大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!
获取页面代码其实很简单,引入urllib库。方法中第一行为打开一个url地址,这时拿到的是一个对象,通过read()方法能拿到这个整个页面的代码,再通过utf-8编码(网站编码),使代码中的中文能被看懂。
下面来看一下运行结果。
好家伙,出错了。这里我爬了一个小时,用了各种编码都是报错。后来百度到一句话:有些网站为了能加载速度快,把代码压缩了。然后顺着这句话,我还真找到一个python的解压缩库。修改了代码之后
运行结果如下
总算是把前端代码取到了。
需要的内容就框在两个p标签中,稍微看了一下,决定用两个正则来取这个开奖号码,先取出p标签中的内容,再取开奖号码
因为不太会写正则,所以匹配了两遍,有点笨但是这里可行。如果有更好的匹配方式,欢迎讨论。大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!
运行结果取到下面一个列表
[‘6’, ‘6’, ‘6’, ‘6’, ‘4’, ‘5’, ‘8’]
到这里抓取开奖号码就已经完成,但是离我的目标还远,我需要对比每一次的开奖结果,将最新的开奖号码通过邮件的形式发送出去。
为什么要保存开奖号码呢?因为每次抓取的不一定是最新的开奖号码,需要新旧对比才能知道那一次抓的是最新开奖号码,当抓到最新的号码后才发送邮件。
这里选择文件来保存
一个简单的文件保存方法就完成,说明一下第二行,因为正则匹配到的是一个列表,所以这里需要转换成字符串才能保存到文件中。
既然保存了文件,就需要再讲文件的内容读取出来,不然保存也没有意义对吧。哈哈哈
这里将之前保存旧开奖号码从文件中提取出来,用于与当前抓取到的开奖号码对比。如果号码相同则不做处理,如果不相同这替换文件,同时将新一期的开奖号码通过邮件发送。
在下面的代码中我把发邮件的逻辑直接写进去了,这里我隐藏了邮件的相关信息,同时也不讲解发邮件的相关内容,有兴趣的可以自己去研究,使用的是python自带的smtp库。
运行结果
成功抓取到开奖号码,并发送邮件。
这里虽然不介绍邮件的功能,但是觉得有必要说一下。我不清楚别的邮件服务器怎么样,当时使用的163的服务器,对方返回了一个错误编码,大概的意思是无法辨别我发的邮件是否垃圾邮件,服务禁止我的请求。后来改用了公司的邮件服务器,算是成功发送了。如果要动手写发邮件的代码,可能会碰到点问题。