美文网首页Python新世界
大三学妹要我帮她找好一点便宜的房子!Python自动监测房源状态

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

作者: 919b0c54458f | 来源:发表于2018-08-16 14:45 被阅读1次

    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分左右的时候开抢,我成功的…失败了...

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

    回家洗洗睡吧

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ckfobftx.html