链家房价数据爬取&可视化

如何了解一个城市的房价的区域分布,或者不同的城市房价的区域差异。如何获取一个城市不同板块的房价数据?本文讲述了如何爬取链家各城市板块的房价数据,以及如何如利用地理可视化引擎可视化这些数据。

数据获取


链家网站提供了地图找房功能,我们可以在地图上浏览任意区域的二手房价格信息,通过地图找房我们可以获取每个房源的价格信息和位置信息,同时链家也提供了区县维度,城市板块维度的房价统计信息。


L7地理可视化

我们还可以获取各个区县的,板块的范围数据。

image.png

绿色的边界即为板块的边界数据

链家房价 在准确性,权威性上都很好的数据源,而且有完整地理信息数据。链家房价数据在科学研究,房价区域趋势研究也有很大的作用。

爬取方法

如何爬取,链家肯定不会让你轻易将他的数据爬走,肯定做了一些反爬取机制,理论上讲只要网页可以看到的数据都是可以爬取的。那我们研究下如何爬取链接各板块的房价数据。

通过对浏览器的网络的监测我们找到地图数据请求接口

image.png

接口参数我们可以看出请求参数城市Id,和经纬度范围获取地图区域内的房价数据。

返回的的数据数据

image.png

正常来讲我只需要把一个城市划分成不同的网格就可以获取一个城市的所有的房价数据,但是事情往往没有那么简单。

我们可以数据有一个authorization 参数,这是参数就是链家的反爬机制。仔细研究发现这是对请求参数做了MD5编码,后端会进行校验只有校验正确才会返回数据。

下面的问题就是找到参数md5编码的方法。

代码跟踪测试我们找到了 参数MD5化的方法

const md5 = function() {
   
  function e(e, t) {
   
      var n = (65535 & e) + (65535 & t);
      return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
  }
  function t(e, t) {
   
      return e << t | e >>> 32 - t
  }
  function n(n, i, a, r, o, s) {
   
      return e(t(e(e(i, n), e(r, s)), o), a)
  }
  function i(e, t, i, a, r, o, s) {
   
      return n(t & i | ~t & a, e, t, r, o, s)
  }
  function a(e, t, i, a, r, o, s) {
   
      return n(t & a | i & ~a, e, t, r, o, s)
  }
  function r(e, t, i, a, r, o, s) {
   
      return n(t ^ i ^ a, e, t, r, o, s)
  }
  function o(e, t, i, a, r, o, s) {
   
      return n(i ^ (t | ~a), e, t, r, o, s)
  }
  function s(t, n) {
   
      t[n >> 5] |= 128 << n % 32,
      t[14 + (n + 64 >>> 9 << 4)] = n;
      var s, l, c, d, u, g = 1732584193, f = -271733879, m = -1732584194, p = 271733878;
      for (s = 0; s < t.length; s += 16)
          l = g,
          c = f,
          d = m,
          u = p,
          g = i(g, f, m, p, t[s], 7, -680876936),
          p = i(p, g, f, m, t[s + 1], 12, -389564586),
          m = i(m, p, g, f, t[s + 2], 17, 606105819),
          f = i(f, m, p, g, t[s + 3], 22, -1044525330),
          g = i(g, f, m, p, t[s + 4], 7, -176418897),
          p = i(p, g, f, m, t[s + 5], 12, 1200080426),
          m = i(m, p, g, f, t[s + 6], 17, -1473231341),
          f = i(f, m, p, g, t[s + 7], 22, -45705983),
          g = i(g, f, m, p, t[s + 8], 7, 1770035416),
          p = i(p, g, f, m, t[s + 9], 12, -1958414417),
          m = i(m, p, g, f, t[s + 10], 17, -42063
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值