干货!链家二手房数据抓取及内容解析要点
“本文对链家官网网页进行内容分析,可以作为一般HTTP类应用协议进行协议分析的参考,同时,对链家官网的结构了解后,可以对二手房相关信息进行爬取,并且获取被隐藏的近期成交信息。”
另外,近期将对包含登录帐号密码的某网站HTTP协议数据进行分析,敬请期待。
作为全国知名的房产中介,链家网站上的二手房交易数据比较全面,可以作为对房产热度进行分析的一个参考资料。
01
—
链家网站总体情况
链家全站HTTPS,无法并行抓包对用户数据进行协议还原,但可采用其它手段,如爬虫等技术对网站数据进行监控。
整个网站的首页为https://www.lianjia.com,内含一系列子站链接,无其它有价值信息,各个城市子站点内数据是我们要分析的主要目标。
我们关注二手房的成交数据,以及挂牌在售数据,因此选取一个子站点cd.lianjia.com对相关数据进行分析,其它子站分析方式类似。
整个子站点挂牌数及成交数很大,遍历不便。但行政区数量有限,只有几个,每个行政区下分成数百数千小区,每个小区有各自的成交数据及在售数据,数据比较规范,可以按统一规律进行数据组织。
02
—
网站结构及内容分析
按照从总到分的顺序逐步遍历网站数据。
1、从小区查找的首页提取各行政区URL。
基础URL为https://cd.lianjia.com/xiaoqu/
下面包含19个行政区。
在这个页面提取到各个行政区域的URL。
对页面内容分析的关键是找到确定内容位置的唯一标识符,很显然,data-role="ershoufang"属性描述的div是唯一的,里面可以获取每个行政区的url以及行政区名。
2、访问每个行政区URL,获取小区总页数
小区数量很多,有很多页,需要一页一页提取,因此需要总结出每一页的URL规律,获取总页数和小区列表每页的url拼接方法。
而class="page-box house-lst-page-box"描述的div内,包含了page-data="{"totalPage":38,"curPage":1}",总页面数38,以及小区列表每页URL的拼接方法page-url="/xiaoqu/jinjiang/pg{page}/",即页面为从cd.lianjia.com/xiaoqu/jinjiang/pg1/到cd.lianjia.com/xiaoqu/jinjiang/pg38/。
其它区域内小区列表页面类似,只需改变URL内的jinjiang为对应区,最后的数字改为对应的页面即可。
3、遍历行政区URL下的分页,提取各个小区的URL以及部分有价值信息。
小区列表内可以提取到小区的属性,如位置,区域,修建时间以及均价在售套数,另外,还有关键的小区url。
从html中可以看到,小区信息在class="listContent"描述的ul内,具备唯一性,而每个小区的描述占一个li,循环遍历即可提取到各项小区信息。
在每个li内,每个div的属性都具备唯一性,按div一级一级查找即可获取,在此不做详述。
各个小区均有一个唯一编号,即URL内的第三段内容,如cd.lianjia.com/xiaoqu/3011056075583/表示的小区编号为3011056075583。
4、根据每个小区的URL,构造成交记录列表URL和在售二手房列表URL。
对一个小区URL如cd.lianjia.com/xiaoqu/3011056075583/,其成交记录列表URL为cd.lianjia.com/chengjiao/c3011056075583/,在售二手房列表URL为cd.lianjia.com/ershoufang/c3011056075583/,在这两个页面,可获取到成交记录总页面数和在售列表总页面数以及构造分页的规律,即各个分页的URL分别为cd.lianjia.com/chengjiao/pg{1-x}c3011056075583/和cd.lianjia.com/ershoufang/pg{1-x}c3011056075583/,其中的{1-x}用页面值代替即可。
5、逐页访问成交记录列表URL页面,可获取全部成交房源URL。
成交列表页面包含了每一套成交房源信息,包括小区,房型,面积,朝向,装修,电梯,楼层,年代,税费,挂牌价,成交周期,成交日期,成交总价,成交单价等信息,但最近成交的价格数据被隐藏,需要到房源页面获取。
从html中可以看到,成交房源信息在class="listContent"描述的ul内,具备唯一性,而每个房源的描述占一个li,循环遍历即可提取到各项房源信息。
在每个li内,每个div的属性都具备唯一性,按div一级一级查找即可获取,在此同样不做详述。
各个房源的URL在class="title"的div内的href属性值内。
6、访问成交房源URL,获取单个房源的详细信息。
进入单个成交房源页面,可以看到完整信息,包括小区,房型,面积,朝向,装修,电梯,楼层,年代,税费,挂牌价,成交周期,成交日期,成交总价,成交单价等更丰富的信息,包括基本属性和交易属性。
基本信息内的基本属性和交易属性与在售房源内基本相同,所以二者在提取时相互借鉴。
在房源标题div内可以提取到房源小区信息,其余信息可在其它位置提取到更详细数据,在此处忽略。
在class="wrapper"的section内,为总价,单价,挂牌价等信息。按各自的class提取即可。
房屋的基本属性和和交易属性在class="newwrap baseinform"的div内的class="introContent"的div内,分成两个div,分别为class="base"及class="transaction"。然后依次提取即可。
7、访问在售二手房列表URL,获取全部在售房源URL。
在售列表页面包含了每一套房源信息,包括小区,房型,面积,朝向,装修,电梯,楼层,年代,税费,挂牌总价,挂牌单价等信息,但更详细的信息,需要到房源页面获取。
从html中可以看到,在售房源信息在class="sellListContent"描述的ul内,具备唯一性,而每个房源的描述占一个li,循环遍历即可提取到各项房源信息。
在每个li内,每个div的属性都具备唯一性,按div一级一级查找即可获取,在此同样不做详述。
各个房源的URL在class="title"的div内的href属性值内。
8、访问在售房源URL,获取单个房源的详细信息。
进入单个在售房源页面,可以看到完整信息,包括小区,房型,建筑面积,套内面积,朝向,装修,电梯,楼层,年代,税费,挂牌总价,挂牌单价等更丰富的信息,包括基本属性和交易属性。
基本信息内的基本属性和交易属性与成交房源内基本相同,所以二者在提取时相互借鉴。
在房源标题div内可以提取到房源小区信息,其余信息可在其它位置提取到更详细数据,在此处忽略。
在class="overview"的div内,为总价,单价等信息。按各自的class提取即可。
房屋的基本属性和和交易属性在class="newwrap baseinform"的div内的class="introContent"的div内,分成两个div,分别为class="base"及class="transaction"。然后依次提取即可。
对所有信息进行提取后,整合即可存入数据库中供使用。
03
—
数据抓取
使用Python及BeautifulSoup库,可以很方便地爬取数据。
Python及BeautifulSoup库安装可以参考之前的文章:
Windows下Python 3.6 安装BeautifulSoup库
通过前一节的分析,可知整个抓取过程如下:
首先,从入口页面提取城市的各区URL。
第二步,获取各小区的URL,并获取小区信息存数据库。
第三步,根据小区URL生成在售页面URL及成交页面URL。
第四步,提取小区在售房源URL,对房源信息分析获取有价值信息存数据库。
第五步,提取小区成交房源URL,对房源信息分析获取有价值信息存数据库。
为加快速度,应采用多线程方式。
如有疑问可联系我进行探讨,有一个简单的房源爬虫可以提供。
长按进行关注。
相关文章:

Atitit.软件兼容性原理与实践 v3 q326.docx
Atitit.软件兼容性原理与实践 v3 q326.docx 1. 架构兼容性1 2. Api兼容性1 2.1. 新api vs 修改旧的api1 3. Web方面的兼容性(js,html)1 3.1. Threadlocal2 4. 数据库表兼容性2 4.1. 2. 扩展表模式2 5. 兼容性策略2 5.1. Atitit.兼容性的“一…

用PULL解析器解析XML文件
第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputStream; 4 import java.util.ArrayList; 5 import java.util.List; 6 import org.xmlpull…
iOS端Socket(二)ProtocolBuffer使用
ProtocolBuffer使用 一、环境及ProtocolBuffer的安装 分别在终端执行以下命令: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"brew install protobuf-swift brew install automake brew install libtoo…

Wireshark分析实战:某达速递登录帐号密码提取
“使用某达速递的官网登陆及APP登录,来学习Wireshark的使用。”在如今这个HTTPS深入人心的情况下,作为一个也不算很小的快递,某达速递,不但全站HTTP,而且登录帐号密码明文未加密传输,也算是技术落后到了一定…
【并行计算-CUDA开发】从零开始学习OpenCL开发(一)架构
多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我《从零开始做OpenCL开发》系列文章的第一篇。 1 异构计算、GPGPU与OpenCL OpenCL是当前一个通用的由很多公司和组织共同发起的多CPU\GPU\其他芯片 异构计算…

使用 fcntl 函数 获取,设置文件的状态标志
前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 )。那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志。 解决思路 1. 对于获取文件状态标志,…
UILabel显示带颜色边的文字
需求如图,UILabel要实现带红色边的文字显示。 1、新建UILabel的子类JXBorderLabel 2、重写drawRect:方法 #import "JXBorderLabel.h"implementation JXBorderLabel- (void)drawRect:(CGRect)rect {//1.获取上下文CGContextRef context UIGraphicsGe…
协议分析中的TCP/IP网络协议
“ TCP/IP协议作为互联网的基础,在协议分析中不可或缺,本文介绍在对协议进行分析还原的过程中的一些要点,快速掌握协议还原的精髓。” 注意,本文比较枯燥乏味,若非需要了解TCP/IP协议相关信息,建议绕行。 …

忠告初学者学习Linux系统的8点建议
忠告初学者学习Linux系统的8点建议新手或者说即将要入坑的小伙伴们,常常在QQ群或者在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:如何给添加的用户归属用户组,复制整个文件到另一个目录下面&#x…

iOS显示gif图片的几种方法
方法一、传统方式 //1.加载Gif图片,转换成Data类型NSString *path [NSBundle.mainBundle pathForResource:"demo" ofType:"gif"];NSData *data [NSData dataWithContentsOfFile:path];//2.将data数据转换成CGImageSource对象CGImageSourceRe…

简单文件传输协议TFTP分析还原
“ 介绍TFTP协议及传输内容的还原。”TFTP,全称为Trivial File Transfer Protocol,即简单文件传输协议,是一个用来在客户端与服务器之间进行简单文件传输的协议,UDP承载,它真的很简单。其协议标准为RFC1350,…

Oracle中的字符处理方法
向左补全字符串lpad(字段名,填充长度,填充的字符) select lpad(1,4,0) from dual; 向右补全字符串rpad(字段名,填充长度,填充的字符) select rpad(1,4,0) from dual; 返回字符串小写select lower(STUDENT) from dual; 返回字符串大写select upper(admin) from dual; 单词首字符…

fwt优化+树形DP HDU 5909
1 //fwt优化树形DP HDU 59092 //见官方题解3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/4 5 #include <bits/stdc.h>6 // #include <iostream>7 // #include <cstdio>8 // #include <cstdlib>9 // #include <algorithm> 10 // #inclu…
iOS直播(二)GPUImage音视频采集
上文中介绍了用AVFoundation实现音视频采集(https://blog.csdn.net/dolacmeng/article/details/81268622) ,开源的基于GPU的第三方图像处理库GPUImage对AVFoundation进行了进一步的封装,打开GPUImgeVideoCamera.m查看代码…

Wireshark使用技巧:提取VOIP通话中的音频流
“Wireshark的RTP流分析功能实战。”在VOIP协议的分析过程中,常常会遇到一些标准协议承载的语音传输,如以SIP、H.323为控制协商协议,RTP为语音数据协议的VOIP传输情况。在语音协议的分析过程中,需要提取的一个重要项是语音内容&am…

在预装win8的电脑上换win7系统讲解
现在买电脑,如果电脑预装的系统是win8系统,那么这个电脑的默认启动模式应该就是UEFI模式,现在UEFI模式正在逐渐取代传统模式。UEFI启动需要一个独立的分区,它将系统启动文件和操作系统本身隔离,可以更好的保护系统的启…
iOS直播(三)GPUImage音视频采集并写入文件
上一篇介绍了用GPUImage图像处理库进行图像采集,从而避免了直接使用AVFoundation(AVKit)时繁琐的代码,同时不用熟悉OpenGL ES也可以快速地对图像进行美颜、添加滤镜等。这一篇介绍如果使用多个滤镜以及录制视频,并保存…

使用Wireshark进行DNS协议解析
“ DNS协议格式解析及说明。”DNS即域名系统(Domain Name System),是用来将域名与IP地址建立映射的协议,通过DNS协议,可以方便记忆。DNS可基于TCP或UDP,使用53号端口,常见的是使用UDP承载&#…

iOS直播(四)对视频进行压缩编码
1.为什么要进行编码? 不经过压缩编码的原视频,所占空间大,不便于保存和网络传输,所以视频录制完后,需要先编码,再传输,解码后再播放。 2.视频为什么可以被压缩? 视频存在冗余信息࿰…

nRF51800 蓝牙学习 进程记录 2:关于二维数组 执念执战
前天在玩OLED时想完成一直想弄得一个东西,就是简单的单片机游戏。因为STM32和nRF51822的内存足够,所以就用缓存数组的方法来显示图像(我也不知道术语是啥,反正就是在内存中建立一个128X64的二维数组,更新显示时将整个数…

.net卸载程序制作
.net卸载程序制作 原文:.net卸载程序制作方法一: 在打包项目中添加文件msiexec.exe(一般在c:\windows\system32(系统目录中)找到)。 在文件系统视图中选择应用程序文件,在msiexec.exe上单击右键选择“创建快捷方式”,重命名快捷方式为“unins…

Windows下的DNS命令用法
“Windows下DNS相关命令的用法。”在协议分析过程中,经常会遇到一种情况,一次对某域名抓包的过程中,抓到了某个域名的DNS请求,之后再抓包,却抓不到的情况。这时候就需要DNS命令出马了,本文介绍Windows下的D…

Kafka集群配置说明
#kafka数据的存放地址,多个地址的话用逗号分 log.dirs/tmp/kafka-logs #broker server服务端口 port9092 #这个参数会在日志segment没有达到log.segment.bytes设置的大小,也会强制新建一个segment会被 topic创建时的指定参数覆盖 log.roll.hours24 #是否…

Tomcat漏洞说明与安全加固
Tomcat是Apache软件基金会的一个免费的、开放源码的WEB应用服务器,可以运行在Linux和Windows等多个平台上,由于其性能稳定、扩展性好、免费等特点深受广大用户的喜爱。目前,互联网上绝大多数JAVA WEB应用都运行在Tomcat服务器上。 Tomcat作为…

《人性的优点》笔记
1.相信自己,做一个成功的人 2.《圣经》中说:“攻克己心,强如攻城” 3.人最大的敌人,不是别人,正是自己 4.不要为木已成舟的事情耗费太多的心血,你无法改变它 5.忧虑是健康的大敌,它只会让你的生…

SIP协议分析
“ 音视频通话控制协议SIP介绍。”SIP(Session Initiation Protocol),即会话发起协议,在RFC2543、RFC3261等中被定义,是一个VOIP信令协议,其目的是在IP网络中实现电话功能,即软电话功能。在互联…

Struts2的工作原理
Struts2是在Struts1的基础上发展而来的,Struts是WebWork和Struts1的集合,采用的正是WebWork的核心,更多的是WebWork。 下载的Struts2源代码文件 主要的包和类: 包名 说明 org.apache.struts2. components 该包封装视图组件&…

Tiny4412 Uboot
1. Build uboot a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)并设置好 环境变量PATH,保证可以正常使用。 b) 解压 uboot_tiny4412-20130729.tgz 并进入相应的目录 tar xzf uboot_tiny4412-20130729.tgz c) 配置 uboot 并编译 cd uboot_tiny4412 m…

iOS逆向(1)——利用ipa重签名,3分钟iPhone安装多个微信
本文要达成如图效果,在一台iPhone上安装第二个微信: 准备: Xcode微信ipa(可通过iTool进行下载)重签名脚本 步骤 打开Xcode,新建Single View App项目,名字可以随意,这里就用Wech…

使用Fiddler进行HTTP流量分析
“ Fiddler抓包工具使用。”Fiddler作为一个PC端的HTTP/HTTPS协议分析工具,能够抓取PC上的流量,并且它对HTTP类数据的分析,要比Wireshark要简单,友好,它对数据的组织格式很好地提高了分析效率。本文介绍如何在PC上使用…