Python新世界

大三学妹要我帮她找好一点便宜的房子!Python自动监测房源状态

2018-08-16  本文已影响1人  919b0c54458f

1.基本思路

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

进群:548377875   即可获取数十套PDF哦!

3.如何获取房源状态

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

4.如何发送微信消息

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

# 给指定好友发送指定内容的消息

def SendAMassage(friend,message):

users = itchat.search_friends(name=friend)

userName = users[0]['UserName']

itchat.send(message,toUserName = userName)

6.2 定义功能函数

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

# 使用手机扫描二维码登录微信

def WeChatLogin():

itchat.login()

# 给指定好友发送指定内容的消息

def SendAMassage(friend,message):

users = itchat.search_friends(name=friend)

userName = users[0]['UserName']

itchat.send(message,toUserName = userName)

# 网页请求

def WebPageRequest(url,header):

string = requests.get(url,headers=header).text

return string

# 正则匹配

def RegularMatch(pattern,string):

pattern=re.compile(pattern)

result=re.search(pattern,string)

return result

# 当前时间(字符串)

def CurrentTime():

curtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

return curtime

6.3 主要执行过程

整体逻辑结构如下:

while True:

try:

...

if url == []: # while循环停止条件

break

...

except:

...

continue # 错误重试

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

设置一些参数值:

# 可在浏览器搜索框中输入about:version获得

header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 QIHU 360SE'}

# 正则匹配模式设置

pattern=r'title="配置中"'

house_info_pattern = r'data-title="(.*)" data-lng'

# 指定微信消息推送好友

friend='君以沫'

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

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

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

message是构造的微信信息内容,主要包含当前时间,房源名称,当前房源状态等信息。

(7)发送程序运行状态

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

(8)程序休息

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

# 休息5秒

time.sleep(5)

(9)意外重连

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

# 意外重连

except:

print('连接断开,重新连接...')

time.sleep(3)

continue

7.结果分析

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

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

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

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

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

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

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

回家洗洗睡吧

上一篇下一篇

猜你喜欢

热点阅读