matlab中提取一幅图片中蓝色区域_[MATLAB爬虫] 爬杭州房价1

v2-aa81ac6494cc9006f635dec6caba74c6_1440w.jpg?source=172ae18b
申明一下,本文爬虫只是为学习matlab代码,不用做其他用途~ 各位朋友也不要随便爬网上的数据~

0 前言

上一篇文章,我简单介绍了MATLAB爬虫的一些基础,详细可以参见下面这篇文章。

szyyy:[MATLAB爬虫] 爬房价数据准备​zhuanlan.zhihu.com
v2-aa81ac6494cc9006f635dec6caba74c6_180x120.jpg

今天,我们就实际来爬杭州市的房价数据。

我们还是用链家网的,为什么用链家网的?

因为链家的稍微容易点,我爬过安居客的,容易被封。。。

1 主要思路

爬取房价的主要思路如下:

1. 首先登录链家杭州官网,查看有哪些数据可以利用,然后查看网页大致的结构(用谷歌浏览器的“查看网页源代码“);

2. 考虑先爬取杭州某个区(比如西湖区)的一个页面的数据, 如果没问题再增加难度,再爬多页和多个区的数据;

单页的数据爬取,上一篇文章已经大致介绍过了,代码可以直接利用。

这里就直接开始,爬取多页和多个小区的数据。

2 具体实现

2.1 观察网址规律

爬虫爬取数据,是根据每个网页的网址来获取具体数据的。

想要自动化的爬取各个区域和每一页的数据,首先得自动化地构建好各个网址。

这需要先观察一下网站网址和网页源代码,寻找到网址和数据的一定规律。

可以点开各个区域的链家,观察一下网址的变化,看看有什么规律。

v2-3a5903542b9f972fa25d279743b672f0_b.jpg

然后再点击各个区域的页数,观察一下网址有什么变化,记录下规律。

v2-6c78fb557dc3c5f84d8e91752642fba4_b.jpg

网址的主要规律如下:

(爬取其他网页的时候,也可以参考这个思路)

v2-8112482bd4de115b2aa4a93248803579_b.jpg

可以看到,这些网页都有个相同的前缀,然后加上区域名就构成了不同区域的首页。

另外,不同页的网址,只要再加个pg1, pg2这样的后缀就行了,代表第一页,第二页。(第一页其实加不加pg1都是一样的)

2.2 构建网址规律

找到了网址的规律后,可以先定义一个初始地址(所有地址相同的部分),然后根据不同的网页,使用strcat将完整的网址拼接起来。

如下,是先定义各个区域的名字,在循环爬取代码时,可以根据cell的顺序,循环拼接出各个区域的网址。

v2-8928cfd500e22b39d80056a25016463e_b.jpg

v2-539d4d706cad6470fd69709b017c7bed_b.jpg

2.3 开始爬数据

获取相应网页的内容,有urlread()和webread()两个函数可以使用;

soureurl = urlread(‘website’);

matlab好像推荐webread, urlread后期版本会去掉;

v2-8e3293789c42eb7d575ea15ac31aa6f0_b.jpg

然后根据正则表达式 regexp(),获取需要的数据:这次主要为小区名和房价(单价,总价)。

构建正则表达式的公式时,也要首先观察网页源代码的规律。

因为webread后获取的网页数据很多,有些可能还是重复的,会导致数据重复或不统一,我们得从相同规律的地方获取数据。

这里有个小技巧,可以在网页源代码中,通过搜索(Ctrl+F),可以确认一下所构建的公式是否能找到对应网页的公式。注:由于网页源代码内容很多,不好找,这里是先通过搜某个具体的小区名,定位到大概的位置范围,然后再确定具体的正则表达式公式。比如在查找小区名时,一个regexp的公式,可以搜出来60个数据,然而,一个页面中,房价信息只要30个,说明这个公式不够具体,会包含一些其他的数据。所以需要重新确定公式,保证搜索来的数据正好是30个。

v2-1627cc9be9e1c901d12517ee613efba0_b.jpg

如下,列出来一些小区名、房价的具体信息的网页源代码,来观察具体的规律,然后列出regexp正则表达式的公式,提取所需的数据。

v2-2f1a7f6c63d501a9e000ae925495178a_b.jpg

注:关于正则表达式regexp提取所需数据,内容还是挺多的,也走了不少弯路;而且有些网页数据,格式和命名还不统一,可能某个正则表达式公式,只能提取到一部分信息,这需要debug调试了,还有最好打印出来一些信息,有助于错误和问题排查。

通过regexp提取完数据后,保存在一个变量,比如cell中,然后批量的写入到xls中就行了。

但这里还有个问题,就是数据爬到什么时候停止?

2.4 结束爬取

爬取数据时,代码是根据页面的数字,一页页往下爬的(通过循环语句),每个区域的页面数量不是固定的,也没有一定规律,那怎么判断到了这个区域的最后一页呢?还是去网页和源代码找规律。a) 首先想到的是,通过页面"下一页"的标识,来判断是否到了最后一页。因为除了最后一页,其他页都是有"下一页"的。可以通过正则表达式,提取网页是否能提取到"下一页",来判断是否到了最后一页。但是在网页源代码中,没搜到"下一页",这个路走不通了。

v2-ef9430f595e242aff9bcb0b0b2b4fd77_b.jpg

b) 可以通过计算 "总房源/每页房源" 得到的数字,来判断总页数。

因为每页房源的数量是固定的(链家网站的是30个)。而且每个区域的页面中,加粗显示了这个区域的总房源,这个数据也很容易在网页源代码中搜索到。

v2-6b6b775109caf88749480b0b662e8057_b.jpg

通过方案b,终于得到每个地区的总页数了。

但是好像杭州某些地区的房源数据太多了,页数最大只能到100页,也就是最多只能显示 30*100 = 3000个房源。像西湖区,总共有6483个房源,剩下3000多个没法显示。 也没办法,只能在程序里做个判断,大于100的,直接按100来算。

v2-3a6ea12544da2b6827d9d8afac312741_b.jpg

2.5 其他一些处理成功爬取到所需数据,还得做些数据的处理;

将数据以合适的格式,存放到xsl中。

v2-18a877e3d5d090e7826ddcff5c360d5f_b.jpg

v2-d062a01358a01fa3e6ade896b8b2456f_b.jpg

然后,为了防止网页监测到爬虫爬取数据,还做了一定的延时,而且不是固定的,是随机数延时。

关于反爬,还有很多方法,比如动态更换IP地址,这部分难度有点大,入门基本可以暂时不管。

v2-fb2b0e708ccc769098d4877cd09faea9_b.jpg

2.6 最后的效果 最后的效果,如下两图;

v2-6d532a13e1fabd1553f631bcf59687b5_b.jpg

每个区域的数据都统一写入了xls中;我在代码2中额外计算了每个区域的单价和总价的最高、最低和平均价。

大家还可以自己对xls的数据进行一些处理,做一些直观的数据分析图。

如果自己不想折腾写程序,也可以。链家在地图找房上,已经给我们统计了一些数据。

杭州地图找房_杭州二手房小区地图_杭州房产地图(杭州链家)​hz.lianjia.com

不过自己写的程序,想要什么数据就有什么数据,定制性强啊~见地图找房:

v2-81979bc831bd1d8ca0b08af51db5f89c_b.jpg

3 总结

至此,关于MATLAB爬虫爬房价的介绍,也差不多了,基本已经将爬静态网页所需的一些要点和流程讲明了,后面要讲的话,可能还有关于动态网页的爬虫,后面有时间再分享~

如果大家有疑问或建议,欢迎私信、留言探讨。另外,以上完整的代码和爬取的最后数据,也已经放到百度云,有需要的可以在公众号,回复"MATLAB爬虫1"获取。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值