一个简单的爬虫——收集安居客上海租房信息

来源:互联网 发布:假面骑士drive知乎 编辑:程序博客网 时间:2024/04/28 11:21


Part 1:

2016年8月13号晚开始写第三个爬虫小程序(安居客),至8月14号中午完成编写并运行成功。

项目源码:https://github.com/carlblocking/xxw-for-public/tree/master/AnJuKeSpider

总体思路:

 

这里借鉴了Web Magic的框架,但没有完全照搬。这里对于Web Magic,个人还是有一点小意见,即里面的正则表达式。个人有些反感正则表达式,还是喜欢用Jsoup来解析网页(运行下来主观感受是Jsoup比正则匹配更快,而且更容易理解)。

在整个小程序中,只有一个实体类,houseInfo类。该类主要用于存储出租房屋的相关信息。包括租金、地点等。

Analysis类是用于解析网页数据并存储到数据库中的。在编写该类的时候,数据库连接在何时关闭挺重要的,不然爬取的数据就存入不了数据库了。

DBHelper是数据库操作类。在编写该类的时候,没有注意数据库连接的创建,结果在运行的时候出现每插入一条数据,就需要创建一个数据库连接的问题,导致连接过多发生异常。这点以后要注意。

Util类用于生成要爬取的连接。同时也是为了避免访问网站次数过多,被网站服务器认定为恶意攻击的情况的出现。在之前的测试运行中,出现过3次这种情况。这种情况的出现,目前想到的有三种处理方式:

1、如果电脑是通过无线路由器连接的互联网,可以通过关闭路由器电源后重启的方法来解决ip被封的问题。

2、如果是通过网线连接互联网的,则需要手动修改电脑的ip来解决这个问题。

3、建立ip池,或者使用代理vpn。这种解决方式需要购买ip,对于个人开发者来说可能用不到。

个人通过第一种方法解决出现的问题。

通过这个程序,收集了1000条上海租房的相关信息。同时,也可以通过修改Util类中的参数,来收集其他城市的租房信息。整个小程序的代码量并不是很大,只是在编写的过程中会遇到一些稀奇古怪的bug。

Part 2:

下面是对于数据的粗略处理(未画图):

1、总体平均租房价格:

        SQL语句:select avg(test.houseinfo.price) as '租房平均价格' from houseinfo

结果:9024元。也就是说,在上海,平均租房成本是9000元,不过统计数据的时候并没有区分整套出租和单间出租,而爬取的数据里大部分是整套出租,因此这个价格应该是租一套房的平均价格。

 

2、各区平均租房价格

SQL语句:select district as '市区名称',avg(test.houseinfo.price) as '租房平均价格' from houseinfo group by district

结果:

 

价格最高的是卢湾区,大概为2万7千元/月,排名第二的长宁区比第一名少了将近1万元(为什么?),最低的是宝山区,但也要4000元(无锡真便宜)。

3、个人平均租房成本

假设上面的结果都是一套房的平均价格,每套房均为三室一厅,那每个人的平均租房成本为:

 

4、不同户型的租房价格 

 

最贵的35万/月,最便宜的一室0厅也要将近3000元...

5、不同出租方式的平均租房价格

 

合租为3200月/月。

如果认为整租的房型为三室一厅,每室住一人,那整租的个人平均租房价格为:3049.67元/月。

上海平均个人租房价格为3000~3200元/月。

Part 3:

总结:上海很贵。

这几个爬虫都没有涉及到登录、多线程等内容,严格上说并不能归结为爬虫程序,不过有爬虫的雏形了。接下来如果有空的话,想做一个QQ空间的爬虫,练习模拟登陆、读取cookie等方法。

对于QQ空间存在权限设置的问题,已经破解了...

 

 

 

 

 

 

0 0
原创粉丝点击