Nodejs爬取杭州楼盘房价的可视化分析

这是一个十分简陋的初学项目,现已重写👇
房价数据爬取接口+数据可视化 - 简书 (jianshu.com)

1.使用Nodejs 爬取楼盘信息

爬取页:


image.png

使用http爬取页面,cheerio分析爬取需要元素的数据,本项目爬取楼盘的名称、地址以及每平米的价格

const https = require("https");
const cheerio = require("cheerio");
const fs = require("fs");

const startPage = 1; // 开始页
const endPage = 100; // 结束页

let page = startPage; // 当前抓取页
let total = 0; // 数据总数

// 初始化url
const url = "https://hz.fang.lianjia.com/loupan/";
// 收集最终数据
let result = [];

// 抓取开始
getData(url);

/**
 * 抓取数据请求函数
 * @param {抓取地址} url
 */
function getData(url) {
  https.get(url, res => {
    let data = "";
    res.on("data", function(chunk) {
      data += chunk;
    });
    res.on("end", function() {
      let formatData = filter(data); // 筛选出需要的数据
      result = result.concat(formatData); // 拼接此次抓取到的数据
      page++;
      if (page <= endPage) {
        // 继续抓取下一页
        // 通过分析 url 规律,拼出下一页的 url
        let tempUrl = "https://hz.fang.lianjia.com/loupan/pg" + page;
        getData(tempUrl); // 递归继续抓取
      } else {
        fs.writeFile("url.js", "let data = " + JSON.stringify(result), err => {
          if (!err) console.log("success~");
        });
      }
    });
  });
}

/**
 * 处理抓取到的dom函数
 * @param {dom数据} data
 */
function filter(data) {
  let final = []; // 用来存储本页所有数据信息
  //将页面源代码转换为$对象
  let $ = cheerio.load(data);

  if (total == 0)
    // 如果没获取过总数,那么获取一次总数
    total = $(".resblock-list-container resblock-have-find span.value").text();
  // 找到列表外层
  let items = $(
    ".resblock-list-container .resblock-list-wrapper .resblock-list"
  );
  // 遍历处理每一条数据
  items.each((index, item) => {
    let temp = {}; // 用来存储此条数据的信息
    let price;
    let title = $(item)
      .find("a.name")
      .text()
      .replace(/\s/g, "");
    if (
      $(item)
        .find("span.desc")
        .text()
        .indexOf("元/平(均价)") >= 0
    ) {
      price = $(item)
        .find("span.number")
        .text();
    } else {
      return final;
    }
    // 过滤万/套的数据方便处理
    let info = $(item)
      .find("div.resblock-location")
      .text()
      .replace(/\s/g, "");
    let address = info;
    temp.name = title;
    temp.value = price;
    temp.address = address;
    console.log(temp);
    final.push(temp);
  });
  return final;
}

结果保存在该目录的url.js文件中


image.png

2.获取数据后需要进行对数据的处理以获取各个楼盘的坐标

本项目使用百度地图api对数据地址进行地址解析获得经纬度

var myGeo = new BMap.Geocoder();

myGeo.getPoint(
              item.address,
              function(point) {
             //point为api返回的地址经纬度
              },
              "杭州市"
            );

经处理后的部分数据:


image.png

3.使用echarts+bmp显示房价散点图

var myChart = echarts.init(document.getElementById("container"));
 myChart.setOption({
        backgroundColor: "transparent",
        title: {
          text: "杭州楼盘房价 - 百度地图",
          left: "right"
        },
        tooltip: {
          trigger: "item",
          formatter: function(params) {
            return params.data.name + ":" + params.data.value[2];
          }
        },
        bmap: {
          center: [120.15, 30.28],//显示地图的中心
          zoom: 12,//缩放倍数
          roam: true,
          mapStyle: {//百度地图样式可在该网站在线编辑 [http://lbsyun.baidu.com/index.php?title=open/custom](http://lbsyun.baidu.com/index.php?title=open/custom)

            styleJson: [
              {
                featureType: "road",
                elementType: "all",
                stylers: {
                  lightness: 20
                }
              },
              {
                featureType: "highway",
                elementType: "geometry",
                stylers: {
                  color: "#f49935"
                }
              },
              {
                featureType: "local",
                elementType: "labels",
                stylers: {
                  visibility: "off"
                }
              },
              {
                featureType: "water",
                elementType: "all",
                stylers: {
                  color: "#d1e5ff"
                }
              },
              {
                featureType: "city",
                elementType: "labels",
                stylers: {
                  visibility: "off"
                }
              }
            ]
          }
        },
        series: [
          {
            name: "hzlp",
            type: "scatter",
            coordinateSystem: "bmap",
            data: data,//设定数据源
            symbolSize: function(val) {
              return val[2] / 5000; //调整圆点的大小为value/5000
            },
            label: {
              formatter: "",
              position: "right"
            },
            itemStyle: {
              color: "#ff3333"
            },
            emphasis: {
              label: {
                show: true
              }
            }
          }
        ]
      });

效果:


1.jpg
2.jpg

具体项目地址:
Nodejs爬取杭州链家楼盘数据:https://github.com/kakuuuu/Node_Crawler_lj
杭州链家楼盘数据可视化:https://github.com/kakuuuu/houseprice-visualization

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容