Python自动监测自如房源状态,推送微信消息提醒状态变更

暑期租房季,很多人会选择在自如租房。好的房源,总会得到更多人的青睐,管家也会告诉你,当前处于配置中的房源会随时释放,没有固定的时间,完全拼手速看运气。为了抢到心仪的房源,需要不停刷页面,随时关注房源释放状态。但一直抱着手机,会影响正常工作,总有顾不及的时候。如果在房源释放后可以第一时间告知我们,就可以租到心仪的房子了。有什么方式可以自动监控房源释放状态,并且能够自动发送通知呢?Python可以登场了…

1.基本思路

自如有很多房源都是处在“配置中”状态,这时候是可以预约看房但是不能租房的,这里要解决的主要问题就是,当房源从“配置中”的状态变更的时候,推送微信消息提醒。

requests模块和itchat模块使用起来非常简单,可以查到很多的网络资源。我们这里也只是用到了最基本的操作,我觉得最有趣的部分其实是思维的闪光,使用了小的工具完成了现实中遇到的小烦恼。

2.工具

微信号:两个(好像一不小心暴露了一些了不得的事情,毕竟也是有俩手机号的人),一个用来网页版登录发送消息,一个用来接收消息,当然可以尝试使用一个账号,或者消息发送给你的男票或女票;

Python:需要安装requests模块和itchat模块。

3.如何获取房源状态

我们随便找一个处在配置中状态的自如房源,通过开发人员工具(可直接按F12),可以看到以下内容:

title="配置中"这就是我们要匹配的字段,找到这个字段,房源就是处在配置中状态。如果该字段匹配不到,那么房源就已经释放,不在配置中的状态了。So easy!麻麻再也不用担心我的租房了。

如上,我们定义了两个函数,分别用来请求网页数据和字段。如果匹配不上,返回值result是一个NoneType的东西,直接使用if result条件判断,即可获知房源状态是否为配置中。

4.如何发送微信消息

itchat.login()执行该语句,会弹出一张图片二维码,使用手机扫码即可登录网页版微信。我们定义以下函数用来向指定好友发送微信消息:

5.其他

为了处理时间,借助Python的time模块,对于基本时间处理已经足够了。

6.代码分析

6.1 模块导入

首先导入需要的模块:

6.2 定义功能函数

定义几个函数,用来实现不同的功能:

函数说明:

WeChatLogin:其实就是微信登录;

SendAMassage:给指定好友发送指定内容的微信消息,参数friend和message分别表示好友备注名称和要发送的消息内容;

WebPageRequest:用来请求网页,获取网页数据,参数url表示网址,header可以通过在浏览器网址框内输入about:version来获取;requests.get返回一个response对象,.text获取是该对象的一个属性,函数返回该属性;

RegularMatch:从函数WebPageRequest返回值中匹配特定模式的字段,参数pattern定义了匹配的模式;

CurrentTime:获取当前时间的字符串格式,例如:'2018-08-09 18:17:43'。

下面要做的就是主要的执行过程了。

6.3 主要执行过程

整体逻辑结构如下:

因为在请求网页的时候可能会报错(网络连接失败等可能原因),所以采用了try…except结构。循环的停止条件是url列表为空,url列表会变为空是因为当一个房源检测状态由配置中变为可预订的时候,会将次网址从url列表中弹出,不再监测。

(1)房源列表

为了支持同时监测多个房源,把需要处理的房源网址保存到一个列表中,随机选几个房源作为示例:

监测房源数目不设上限,可以根据需要添加。

(2)部分固定参数值设置

设置一些参数值:

(又不小心暴露了很多了不得的事情)

(3)微信登录

(4)房源列表监测逻辑

在while循环外先初始化计数num为0,在while每次循环中,都首先获取url列表当前的长度,我们采用计算num = (num + 1) % length,先假设url长度不变(即length固定),那么通过while循环,num的取值正好是0,1,2,…,num-1,0,1,2…,正好可以遍历url列表的所有元素(用num的值做索引),这样子我们可以在这里避免再次使用一个循环,同时又保证了对所有房源的状态监测。

需要注意的是,当房源状态未能匹配到配置中的时候,即已经变为可预订的时候,num会重置为0,这是因为在重置语句的上面,执行了url.pop()的操作,列表长度变更,避免继续使用num原值导致的列表索引溢出的错误(例如当length=4,num=3的时候,url弹出一个元素后,长度变为3,这时候url[3]就会报错)。

当然,重置为0会有一个小问题,即对房源的监测会重新开始(从列表第一个房源开始),后面没有监测的房源会重新排队等待监测,不过,每一个房源都会被监测的,而且由于url的长度不会很大,排队的时间不会很久。

(5)请求网页,匹配字段

result是匹配的房源状态,表明是否处于配置中;house_info_result是匹配房源名称,读取房源名称的时候需要通过house_info_result.group(1)的方式来获取。

(6)发送微信通知

前面提到过,用result可以判断匹配结果,当result为NoneType时,实际上相当于False。

(7)发送程序运行状态

因为要实现不间断的实时监测,就需要程序一直在运行,有时候人不在电脑前了,就不知道程序执行结果如何了。通过定时发送微信信息,提示程序执行状态。

(8)程序休息

有时候频繁请求网页,可能会因为网络延迟等原因报错,或者会被网址封掉,让程序间隔几秒的休息是必要的。

(9)意外重连

如果程序执行出错,则让程序休息几秒后重试。

7.结果分析

今天测试的时候,在晚饭的时候成功推送一条消息,提示房源从配置中状态变更,然后火速登录app查看房源状态,果然,房源从配置中变更为可签约倒计时,印象中是倒计时在58分多一些,我不清楚自如的倒计时是不是从1小时开始的。但我猜测是,从监测到状态变更,加上中间看微信消息、登录app,差不多一分多钟的时间。

接收到的微信推送消息如下图:

在上图中也可以看到整点推送的微信消息提醒。

吃完饭回来,赶紧定好闹钟,坐等开抢。已被管家提前告知,较多人在关注该房源,内心竟然还有那么一点小激动。(~ ̄▽ ̄)~

下面是Python窗口打印的消息记录:

有了自动程序的帮助,终于,在晚上7:16分左右的时候开抢,我成功的…失败了...

所以,我还是没有租到房!没有租到!!没有!!!∑(゚Д゚ノ)ノ

回家洗洗睡吧

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180809G1V0QR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券