加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

爬取两万多租房数据,告诉你广州房租现状

发布时间:2018-12-23 08:13:17 所属栏目:教程 来源:zone7
导读:概述 前言 统计结果 爬虫代码实现 爬虫分析实现 后记 前言 建议在看这篇文章之前,请看完这三篇文章,因为本文是依赖于前三篇文章的: 爬虫利器初体验(1) 听说你的爬虫又被封了?(2) 爬取数据不保存,就是耍流氓(3) 八月份的时候,由于脑洞大开,决定用 pyt

数据分析:

  1. # 求一个区的房租单价(平方米/元) 
  2.    def getAvgPrice(self, region): 
  3.        areaPinYin = self.getPinyin(region=region) 
  4.        collection = self.zfdb[areaPinYin] 
  5.        totalPrice = collection.aggregate([{'$group': {'_id': '$region', 'total_price': {'$sum': '$price'}}}]) 
  6.        totalArea = collection.aggregate([{'$group': {'_id': '$region', 'total_area': {'$sum': '$area'}}}]) 
  7.        totalPrice2 = list(totalPrice)[0]["total_price"] 
  8.        totalArea2 = list(totalArea)[0]["total_area"] 
  9.        return totalPrice2 / totalArea2 
  10.  
  11.    # 获取各个区 每个月一平方米需要多少钱 
  12.    def getTotalAvgPrice(self): 
  13.        totalAvgPriceList = [] 
  14.        totalAvgPriceDirList = [] 
  15.        for index, region in enumerate(self.getAreaList()): 
  16.            avgPrice = self.getAvgPrice(region) 
  17.            totalAvgPriceList.append(round(avgPrice, 3)) 
  18.            totalAvgPriceDirList.append({"value": round(avgPrice, 3), "name": region + "  " + str(round(avgPrice, 3))}) 
  19.  
  20.        return totalAvgPriceDirList 
  21.  
  22.    # 获取各个区 每一天一平方米需要多少钱 
  23.    def getTotalAvgPricePerDay(self): 
  24.        totalAvgPriceList = [] 
  25.        for index, region in enumerate(self.getAreaList()): 
  26.            avgPrice = self.getAvgPrice(region) 
  27.            totalAvgPriceList.append(round(avgPrice / 30, 3)) 
  28.        return (self.getAreaList(), totalAvgPriceList) 
  29.  
  30.    # 获取各区统计样本数量 
  31.    def getAnalycisNum(self): 
  32.        analycisList = [] 
  33.        for index, region in enumerate(self.getAreaList()): 
  34.            collection = self.zfdb[self.pinyinDir[region]] 
  35.            print(region) 
  36.            totalNum = collection.aggregate([{'$group': {'_id': '', 'total_num': {'$sum': 1}}}]) 
  37.            totalNum2 = list(totalNum)[0]["total_num"] 
  38.            analycisList.append(totalNum2) 
  39.        return (self.getAreaList(), analycisList) 
  40.  
  41.    # 获取各个区的房源比重 
  42.    def getAreaWeight(self): 
  43.        result = self.zfdb.rent.aggregate([{'$group': {'_id': '$region', 'weight': {'$sum': 1}}}]) 
  44.        areaName = [] 
  45.        areaWeight = [] 
  46.        for item in result: 
  47.            if item["_id"] in self.getAreaList(): 
  48.                areaWeight.append(item["weight"]) 
  49.                areaName.append(item["_id"]) 
  50.                print(item["_id"]) 
  51.                print(item["weight"]) 
  52.                # print(type(item)) 
  53.        return (areaName, areaWeight) 
  54.  
  55.    # 获取 title 数据,用于构建词云 
  56.    def getTitle(self): 
  57.        collection = self.zfdb["rent"] 
  58.        queryArgs = {} 
  59.        projectionFields = {'_id': False, 'title': True}  # 用字典指定需要的字段 
  60.        searchRes = collection.find(queryArgs, projection=projectionFields).limit(1000) 
  61.        content = '' 
  62.        for result in searchRes: 
  63.            print(result["title"]) 
  64.            content += result["title"] 
  65.        return content 
  66.  
  67.    # 获取户型数据(例如:3 室 2 厅) 
  68.    def getRooms(self): 
  69.        results = self.zfdb.rent.aggregate([{'$group': {'_id': '$rooms', 'weight': {'$sum': 1}}}]) 
  70.        roomList = [] 
  71.        weightList = [] 
  72.        for result in results: 
  73.            roomList.append(result["_id"]) 
  74.            weightList.append(result["weight"]) 
  75.        # print(list(result)) 
  76.        return (roomList, weightList) 
  77.  
  78.    # 获取租房面积 
  79.    def getAcreage(self): 
  80.        results0_30 = self.zfdb.rent.aggregate([ 
  81.            {'$match': {'area': {'$gt': 0, '$lte': 30}}}, 
  82.            {'$group': {'_id': '', 'count': {'$sum': 1}}} 
  83.        ]) 
  84.        results30_60 = self.zfdb.rent.aggregate([ 
  85.            {'$match': {'area': {'$gt': 30, '$lte': 60}}}, 
  86.            {'$group': {'_id': '', 'count': {'$sum': 1}}} 
  87.        ]) 
  88.        results60_90 = self.zfdb.rent.aggregate([ 
  89.            {'$match': {'area': {'$gt': 60, '$lte': 90}}}, 
  90.            {'$group': {'_id': '', 'count': {'$sum': 1}}} 
  91.        ]) 
  92.        results90_120 = self.zfdb.rent.aggregate([ 
  93.            {'$match': {'area': {'$gt': 90, '$lte': 120}}}, 
  94.            {'$group': {'_id': '', 'count': {'$sum': 1}}} 
  95.        ]) 
  96.        results120_200 = self.zfdb.rent.aggregate([ 
  97.            {'$match': {'area': {'$gt': 120, '$lte': 200}}}, 
  98.            {'$group': {'_id': '', 'count': {'$sum': 1}}} 
  99.        ]) 
  100.        results200_300 = self.zfdb.rent.aggregate([ 
  101.            {'$match': {'area': {'$gt': 200, '$lte': 300}}}, 
  102.            {'$group': {'_id': '', 'count': {'$sum': 1}}} 
  103.        ]) 
  104.        results300_400 = self.zfdb.rent.aggregate([ 
  105.            {'$match': {'area': {'$gt': 300, '$lte': 400}}}, 
  106.            {'$group': {'_id': '', 'count': {'$sum': 1}}} 
  107.        ]) 
  108.        results400_10000 = self.zfdb.rent.aggregate([ 
  109.            {'$match': {'area': {'$gt': 300, '$lte': 10000}}}, 
  110.            {'$group': {'_id': '', 'count': {'$sum': 1}}} 
  111.        ]) 
  112.        results0_30_ = list(results0_30)[0]["count"] 
  113.        results30_60_ = list(results30_60)[0]["count"] 
  114.        results60_90_ = list(results60_90)[0]["count"] 
  115.        results90_120_ = list(results90_120)[0]["count"] 
  116.        results120_200_ = list(results120_200)[0]["count"] 
  117.        results200_300_ = list(results200_300)[0]["count"] 
  118.        results300_400_ = list(results300_400)[0]["count"] 
  119.        results400_10000_ = list(results400_10000)[0]["count"] 
  120.        attr = ["0-30平方米", "30-60平方米", "60-90平方米", "90-120平方米", "120-200平方米", "200-300平方米", "300-400平方米", "400+平方米"] 
  121.        value = [ 
  122.            results0_30_, results30_60_, results60_90_, results90_120_, results120_200_, results200_300_, results300_400_, results400_10000_ 
  123.        ] 
  124.        return (attr, value) 

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读