大三学妹要我帮她找好一点便宜的房子!Python自动监测房源状态
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分左右的时候开抢,我成功的…失败了...
所以,我还是没有给学妹租到房!没有租到!!没有!!!∑(゚Д゚ノ)ノ
回家洗洗睡吧