python每隔半个小时执行一次_怕错过自住房信息,用个python脚本来定时抓取吧

207704ab6f7c1d2ab133193391d1c961.png

使用python也有一段时间了,最近比较关注自住房信息,虽说它更新的比较缓慢,但是平时也不怎么会特意的去它的网站上去看,于是就想用python抓它的信息,如果有新的信息就给自己发个邮件,这样手机上得到通知以后就可以再去它的网站上看看。

功能比较简单,但是用到的点还是挺多的,这里记录一下。

主要有以下几个步骤

  1. python beautifulsoup 与requests的使用
  2. ubuntu 中安装 mysql 与mysql-python
  3. beautifulsoup与requests编码的问题
  4. 使用gmail发送邮件,其中gmail采用两步认证要单独申请一个密码
  5. 在ubuntu中使用crontab定时来触发脚本

网站分析

自住房信息的网址为 http://www.bjjs.gov.cn/bjjs/fwgl/zzxspzf/tzgg/index.shtml

主要就是抓取上面的通知,使用数据库或者本地文件记录一下url和标题

主要就是以下这块html

  • 富兴鹏城自住型商品住房递补选房公告2017-07-06
  • 朝阳区锦都家园自住型商品住房项目申购登记公告2017-06-12
  • 住总万科·TBD万科天地自住型商品住房递补选房公告2017-06-09 .... ... .. .

我这里使用的是beautifulsoup来进行解析。

beautifulsoup的使用参考 beautifulsoup使用

我一开始使用requests库的get方法来抓取网页,后来我被它的编码逼疯了,在网上查了下,requests与beautifulsoup都会对网页的编码进行优化,

6be99e0c11fbe6555a9ad69d9368ac68.png

但是它们同时优化就会出现很多头疼的问题,所以最后我使用python的urllib来抓取网页

0cb5ff0fcf6a534542861c4a60eddb54.png

解析出url 与title信息

f4867d84237c314353cc23706c09059f.png

使用 soup.find('ul',opentype="page") 来定位到通知的ul dom结构,然后再寻找下面的a结构,美汤的用法还是很牛逼的。

使用mysql来记录

得到url与title信息后,就去数据库中查寻一下,我一开始想用mongo,但是由于我的VPS是OpenVZ的,所以安装mongodb以后发现有很多问题,最后索性放弃,改用mysql。

ubuntu 上安装mysql还是挺简单的

sudo apt-get install mysql-server mysql-client

安装过程中会设置root密码,安装结束后,我创建了一个库和表

mysql> CREATE DATABASE houseinfo;mysql> use houseinfo;mysql> create table house ( id int NOT NULL AUTO_INCREMENT PRIMARY KEY, url text NOT NULL, title text NOT NULL) DEFAULT CHARSET=utf8;

在表中查询url字段是否存在,不存在的话就插入

988f9d76daa41c1797b2aabb5955baa2.png

发送新通知邮件

当有一个新的通知发出来以后需要发送一封邮件

因为VPS是在国外,所在我这里使用的是gmail的smtp服务,因为我的google账户采用了两步认证,所以这里还得重新申请一个临时密码,这里不得不提一下google的服务,太人性化了!具体使用请参考 https://support.google.com/accounts/answer/185833

151944a5fd3577c81e74b3bf59650fbd.png

设置crontab任务

在linux的世界里crontab绝对是神一样的存在

使用参考 crontab使用

我这里设置的是每隔一个小时执行一次

1* */1 * * * python /root/gethouseinfo.py

最终的效果是我收到了好多邮件。。。

5000a527d87ffc62c36e166c1f14848c.png

mac上也可以实时的收到

0671a38af5b0f92311f70517811ddc5f.png

最张的全代码

0a23392c84ecb24d43105ea5886cdb7d.png

遗留的问题

如果长时间的使用某个IP去抓该网站的信息它如果给封了IP就不行了,而且我也没有设置访问的header,以后可以设置一下代理或者header信息。

代码写的比较low,主要是为了尝试一种新的方式来获取信息。

由于今日头条上发的文章对于代码排版不太方便,所以我将代码片段都使用了截图的方式,想要复制代码请点击 "了解更多"来查看原文或者微信搜索公众号"序语程言"

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值