大三学妹要我帮她找好一点便宜的房子!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,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分左右的时候开抢,我成功的…失败了... 所以,我还是没有给学妹租到房!没有租到!!没有!!!∑(?Д?ノ)ノ 回家洗洗睡吧 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |