zoukankan      html  css  js  c++  java
  • 我用Python爬取了李沧最近一年多的二手房成交数据得出以下结论

    前言

    去年年底,博主有购房的意愿,本来是打算在青岛市北购房,怎奈工作变动,意向转移到了李沧,坐等了半年以后,最终选择在红岛附近购置了期房。

    也许一些知道青岛红岛的小伙伴会问我,为什么会跑到那鸟不拉屎的地方去买房子,目前只能是一个字:"赌、赌、赌",重要的事情说三遍。下面来分析一下,我为什么没有在李沧买。

    爬取数据

    爬取了2018年1月份到2019年3月底李沧二手房成交记录,数据仅限于链家,不代表李沧地区的全部数据,但是我觉得应该对大家有一定的参考意义。

    创建基本的数据库:

    CREATE TABLE `house` (
       `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
       `url` varchar(50) NOT NULL COMMENT '网络访问地址',
       `listed_price` double NOT NULL COMMENT '挂牌价格',
       `completion_date` date NOT NULL COMMENT '成交日期',
       `transaction_cycle` int(11) NOT NULL COMMENT '成交周期',
       `modify_price` int(11) NOT NULL COMMENT '调价次数',
       `square_metre` double NOT NULL COMMENT '建筑面积',
       `unit_price` double NOT NULL COMMENT '单价',
       `total_price` double NOT NULL COMMENT '总价',
       `age_completion` int(11) NOT NULL COMMENT '建成年代',
       `community_name` varchar(50) NOT NULL COMMENT '所在小区',
       PRIMARY KEY (`id`)
     ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
    

    爬取代码:

    __author__ = "小柒"
    __blog__ = "https://blog.52itstyle.vip/"
    import requests
    import time
    # 导入文件操作库
    import os
    import re
    import bs4
    from bs4 import BeautifulSoup
    import sys
    from util.mysql_DBUtils import mysql
    
    
    # 写入数据库
    def write_db(param):
        try:
            sql = "insert into house (url,listed_price,transaction_cycle,modify_price," 
                  "square_metre,unit_price,total_price,age_completion,community_name,completion_date) "
            sql = sql + "VALUES(%(url)s,%(listed_price)s, %(transaction_cycle)s,%(modify_price)s,"
            sql = sql + "%(square_metre)s,%(unit_price)s,%(total_price)s," 
                        "%(age_completion)s,%(community_name)s,%(completion_date)s)"
            mysql.insert(sql, param)
        except Exception as e:
            print(e)
    
    
    # 主方法
    def main():
        # 给请求指定一个请求头来模拟chrome浏览器
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                                 '(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
        page_max = 24
        # 爬取地址
        for i in range(1, int(page_max) + 1):
            print("第几页:" + str(i))
            if i == 1:
                house = 'https://qd.lianjia.com/chengjiao/licang/'
            else:
                house = 'https://qd.lianjia.com/chengjiao/licang/pg'+str(i)
            res = requests.get(house, headers=headers)
            soup = BeautifulSoup(res.text, 'html.parser')
            li_max = soup.find('ul', class_='listContent').find_all('li')
            for li in li_max:
                try:
                    house_param = {}
                    # 所在小区
                    community = li.find('div', class_='title').text
                    community_name = community.split(" ")[0]
                    house_param['community_name'] = community_name
                    # 成交地址
                    title_src = li.find('a').attrs['href']
                    house_param['url'] = title_src
                    res = requests.get(title_src, headers=headers)
                    soup = BeautifulSoup(res.text, 'html.parser')
                    # --------------------------------------------------------#
                    # 成交日期
                    completion_date = soup.find('div', class_='house-title').find('span').text
                    completion_date = completion_date.split(" ")[0]
                    completion_date = completion_date.replace(".", "-")
                    house_param['completion_date'] = completion_date
                    # 挂牌价格
                    listed_price = soup.find('div', class_='msg').find_all('span')[0].find('label').text
                    house_param['listed_price'] = listed_price
                    # 成交周期
                    transaction_cycle = soup.find('div', class_='msg').find_all('span')[1].find('label').text
                    house_param['transaction_cycle'] = transaction_cycle
                    # 调价次数
                    modify_price = soup.find('div', class_='msg').find_all('span')[2].find('label').text
                    house_param['modify_price'] = modify_price
                    # 建筑面积
                    square_metre = soup.find('div', class_='content').find("ul").find_all('li')[2].text
                    square_metre = re.findall(r'-?d+.?d*e?-?d*?', square_metre)[0]
                    house_param['square_metre'] = square_metre
                    # 总价
                    total_price = soup.find('span', class_='dealTotalPrice').find('i').text
                    house_param['total_price'] = total_price
                    # 单价
                    unit_price = soup.find('b').text
                    house_param['unit_price'] = unit_price
                    # 建筑年代
                    age_completion = soup.find('div', class_='content').find("ul").find_all('li')[7].text
                    age_completion = re.findall(r'-?d+.?d*e?-?d*?', age_completion)[0]
                    house_param['age_completion'] = age_completion
                    write_db(house_param)
                except Exception as e:
                    print(e)
            mysql.end("commit")
        mysql.dispose()
    
    
    if __name__ == '__main__':
        main()
    
    

    通过数据爬取,一共找到了706套二手成交房。

    分析数据

    直奔主题,数据分析下,大家比较关心的价格问题,以下是2019年1月-3月的二手房成交量以及成交价格:

    位置 成交量 单价
    李沧 124 21100

    同比去年的二手房成交量以及成交价格:

    位置 成交量 单价
    李沧 277 21306

    吓的博主赶紧用计算器认认真真,仔仔细细的核算了三遍,才敢写下这几个数字,同比去年,单价整整降了206人民币,此处有掌声。再看一下成交量,相比去年少了足足一半之多,相信那124套房子也是卖家忍痛降了206人民币才卖出去的吧!

    好了,再看一下大家比较关心的成交周期,2019年1月-3月的二手房成交量以及成交周期:

    位置 成交量 成交周期(天)
    李沧 124 96

    同比去年的二手房成交量以及成交周期:

    位置 成交量 成交周期(天)
    李沧 277 83

    不得不说,相比去年房子的确是难卖了。

    小结

    很多同事,同学,13、14年就已经上车了,那时李沧1w不到,再看看现在?不想看,没眼看,不能看。最终没在李沧买房,也不是买不起,只是看不到降的希望,相对压力又大一些,而且,也不想把家庭所有的积蓄都赌在这里。

    最后,对于刚需就是一个建议,买早买,有房和没房看一个城市是不一样的,努力赚钱的最大意义就是提升你的幸福感。活在人间不食人间烟火?真以为自己是神仙?有些东西一说的实际一点真的是会伤到某些人的心,祝你们用键盘战胜一切。

    相关代码:https://gitee.com/52itstyle/Python

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/smallSevens/p/10638114.html
Copyright © 2011-2022 走看看