Nodejs爬取杭州樓盤房價的可視化分析

這是一個十分簡陋的初學(xué)項目拦坠,現(xiàn)已重寫??
房價數(shù)據(jù)爬取接口+數(shù)據(jù)可視化 - 簡書 (jianshu.com)

1.使用Nodejs 爬取樓盤信息

爬取頁:


image.png

使用http爬取頁面爱咬,cheerio分析爬取需要元素的數(shù)據(jù)铅檩,本項目爬取樓盤的名稱岂津、地址以及每平米的價格

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

const startPage = 1; // 開始頁
const endPage = 100; // 結(jié)束頁

let page = startPage; // 當(dāng)前抓取頁
let total = 0; // 數(shù)據(jù)總數(shù)

// 初始化url
const url = "https://hz.fang.lianjia.com/loupan/";
// 收集最終數(shù)據(jù)
let result = [];

// 抓取開始
getData(url);

/**
 * 抓取數(shù)據(jù)請求函數(shù)
 * @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); // 篩選出需要的數(shù)據(jù)
      result = result.concat(formatData); // 拼接此次抓取到的數(shù)據(jù)
      page++;
      if (page <= endPage) {
        // 繼續(xù)抓取下一頁
        // 通過分析 url 規(guī)律坎怪,拼出下一頁的 url
        let tempUrl = "https://hz.fang.lianjia.com/loupan/pg" + page;
        getData(tempUrl); // 遞歸繼續(xù)抓取
      } else {
        fs.writeFile("url.js", "let data = " + JSON.stringify(result), err => {
          if (!err) console.log("success~");
        });
      }
    });
  });
}

/**
 * 處理抓取到的dom函數(shù)
 * @param {dom數(shù)據(jù)} data
 */
function filter(data) {
  let final = []; // 用來存儲本頁所有數(shù)據(jù)信息
  //將頁面源代碼轉(zhuǎn)換為$對象
  let $ = cheerio.load(data);

  if (total == 0)
    // 如果沒獲取過總數(shù),那么獲取一次總數(shù)
    total = $(".resblock-list-container resblock-have-find span.value").text();
  // 找到列表外層
  let items = $(
    ".resblock-list-container .resblock-list-wrapper .resblock-list"
  );
  // 遍歷處理每一條數(shù)據(jù)
  items.each((index, item) => {
    let temp = {}; // 用來存儲此條數(shù)據(jù)的信息
    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;
    }
    // 過濾萬/套的數(shù)據(jù)方便處理
    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;
}

結(jié)果保存在該目錄的url.js文件中


image.png

2.獲取數(shù)據(jù)后需要進(jìn)行對數(shù)據(jù)的處理以獲取各個樓盤的坐標(biāo)

本項目使用百度地圖api對數(shù)據(jù)地址進(jìn)行地址解析獲得經(jīng)緯度

var myGeo = new BMap.Geocoder();

myGeo.getPoint(
              item.address,
              function(point) {
             //point為api返回的地址經(jīng)緯度
              },
              "杭州市"
            );

經(jīng)處理后的部分?jǐn)?shù)據(jù):


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,//縮放倍數(shù)
          roam: true,
          mapStyle: {//百度地圖樣式可在該網(wǎng)站在線編輯 [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,//設(shè)定數(shù)據(jù)源
            symbolSize: function(val) {
              return val[2] / 5000; //調(diào)整圓點的大小為value/5000
            },
            label: {
              formatter: "",
              position: "right"
            },
            itemStyle: {
              color: "#ff3333"
            },
            emphasis: {
              label: {
                show: true
              }
            }
          }
        ]
      });

效果:


1.jpg
2.jpg

具體項目地址:
Nodejs爬取杭州鏈家樓盤數(shù)據(jù):https://github.com/kakuuuu/Node_Crawler_lj
杭州鏈家樓盤數(shù)據(jù)可視化:https://github.com/kakuuuu/houseprice-visualization

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子忆肾,更是在濱河造成了極大的恐慌,老刑警劉巖菱肖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件客冈,死亡現(xiàn)場離奇詭異,居然都是意外死亡稳强,警方通過查閱死者的電腦和手機(jī)场仲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門和悦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人燎窘,你說我怎么就攤上這事摹闽。” “怎么了褐健?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵付鹿,是天一觀的道長。 經(jīng)常有香客問我蚜迅,道長舵匾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任谁不,我火速辦了婚禮坐梯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刹帕。我一直安慰自己吵血,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布偷溺。 她就那樣靜靜地躺著蹋辅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挫掏。 梳的紋絲不亂的頭發(fā)上侦另,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音尉共,去河邊找鬼褒傅。 笑死,一個胖子當(dāng)著我的面吹牛袄友,可吹牛的內(nèi)容都是我干的殿托。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼剧蚣,長吁一口氣:“原來是場噩夢啊……” “哼支竹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起券敌,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤唾戚,失蹤者是張志新(化名)和其女友劉穎柳洋,沒想到半個月后待诅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡熊镣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年卑雁,在試婚紗的時候發(fā)現(xiàn)自己被綠了募书。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡测蹲,死狀恐怖莹捡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扣甲,我是刑警寧澤篮赢,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站琉挖,受9級特大地震影響启泣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜示辈,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一寥茫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矾麻,春花似錦纱耻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胰耗,卻和暖如春限次,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柴灯。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工卖漫, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赠群。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓羊始,卻偏偏與公主長得像,于是被迫代替她去往敵國和親查描。 傳聞我的和親對象是個殘疾皇子突委,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容