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

程序员租房妙招,爬一个好房

发布时间:2019-03-14 16:13:00 所属栏目:建站 来源:51Reboot
导读:背景 春节过后回京,本想好好休息两天结果家里迎来了不速之客老鼠。最后通过一系列的操作终于成功捕获一家 8 口,这个过程笔者就不做多描述了。由于此次捕鼠事件留下阴影决定搬离。和媳妇开始寻找合适的房源,这还只是一个开始;之后看好房子(房子还在配置
副标题[/!--empirenews.page--]

背景

春节过后回京,本想好好休息两天结果家里迎来了不速之客——老鼠。最后通过一系列的操作终于成功捕获一家 8 口,这个过程笔者就不做多描述了。由于此次捕鼠事件留下阴影决定搬离。和媳妇开始寻找合适的房源,这还只是一个开始;之后看好房子(房子还在配置中)跟管家约定好释放当日签约;和媳妇两台手机两台电脑抢房子结果还是失之交臂。就算是双十一也不过如此吧!

之后继续找房发现基于小区搜索房源结果很不准确(用地铁站能过滤出来的,但直接用小区名就是搜不全),再加上想对当前市场房源有一个更清晰的了解,于是便有了一个想法——能否通过爬虫自己做个检索来找房子。

程序员租房妙招,爬一个好房

开始

通过爬虫自己做个检索来找房子,有了这个想法后就试着做一下,首先有一个大概思路:

  • 写一个爬虫程序,尽可能解析出房子相关信息作为字段存储。
  • 将数据存放在 ES(Elasticsearch)中便于查找。
  • 使用 kibana 实现查询和分析,因其作为 ELK 经典组件,在查询分析上的强大优势不再多言。

需开发的爬虫可分为如下模块:

  • 控制模块:作为起始开关和任务管理
  • 抓取模块:输入一个网址,输出网页内容
  • 解析模块:接收一段内容,输出有价值的字段信息,以及下一页等更多待解析的任务
  • 存储模块:简单的做一个 map 进行运行时去重,然后将信息写入 ES

整个架构和其他爬虫基本一样,但自如为防止爬虫,搜索结果最多显示50页,对应办法就是遍历重要的查询参数,比如城市、地铁站、房子类型等。于是解析模块的顺序大概是:

1. 城市列表解析器,用来解析不同城市(当然这里只需要北京)

2. 地铁站解析器,用来解析出不同的地铁站

3. 房屋列表解析器,用来解析每一页的房屋列表和下一页待解析的任务

4. 房屋详情解析器,用来解析房屋的详细信息,如朝向、面积、户型、楼层、阳台、室友等

这里需要注意几点:

1. 爬虫使用 golang,它本身没有解析库,可以用第三方的 css 样式选择器、xpath,也完全可以用正则搞定,这里主要用正则实现,部分地方试用了下 css 选择器。

程序员租房妙招,爬一个好房

2. 部分房间信息如地铁站、地铁线路、所属 url、阳台、装修风格在房屋详情中不容易提取,可以在上一级页面如房屋列表中获得。

程序员租房妙招,爬一个好房

程序员租房妙招,爬一个好房

程序员租房妙招,爬一个好房

3. 房租价格做了反爬虫处理,不容易获得,具体是价格为不同图片拼接,这些图片根据一个静态随机页面搭配 offset 进行判断,然后通过 ocr 进行基本图片识别就能得到。

程序员租房妙招,爬一个好房

在上一级的网页源码中可以发现对应的原始图片和序号,这样就很简单了。

程序员租房妙招,爬一个好房

接下来是图片识别,需要用到一个利器——tesseract(https://github.com/tesseract-ocr/tesseract/wiki)

程序员租房妙招,爬一个好房

程序员租房妙招,爬一个好房

程序员租房妙招,爬一个好房

尽管有这么个神器,但解析成功率依然不能保证 100%,尤其是在没有训练的情况下,因此就需要像上面代码中那样,在短期内想提高效率就添加部分人工识别的代码,并降低重复工作,也能基本满足需求。

(编辑:核心网)

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

热点阅读