一、数据爬取爬虫这一块是利用requests来实现的,并通过BeautifulSoup4实现解析。.我选取的是58同城上广州地区各个价格区间的个人房源。2.这里我进行了两层爬虫,第一层是爬取房源列表的数据,爬到的每条房源数据都为其设置一个ID号,并爬下房源的标题、地址、Url等数据。第二层爬取则是根据第一层生成的房源ID号和爬到的每个房源链接,进入每个房源URL并抓取其详细信息。下面是获取详细信息的部分代码,通过对网页的解析,进而爬取出具体数据:# 通过bs4获取对应的网页

        time.sleep(3)print("fetch:" + house_url)response = requests.get(house_url, headers=headers)html = BeautifulSoup(response.text, "html.parser", exclude_encodings="utf-8")   //使用html.parser进行解析house_title_node = html.select(".house-title")if not house_title_node:continuehouse_title = html.select(".house-title")[0].select("h1")[0].string.strip()   //房源标题#print("=========title:" + house_title)     //这里包括下面的每次打印是为了测试是否出错house_price = html.select("b.f36")[0].string   //房源价格if html.select("span.c_333")[0].string:pay_method = html.select("span.c_333")[0].string   //支付方式print("=========pay:" + pay_method)house_type = html.select("ul.f14")[0].select("li")[0].select("span")[1].string   //租房类型print("=========house_type:" + house_type)room_info = html.select("ul.f14")[0].select("li")[1].select("span")[1].string.strip()room_info_list = room_info.split()for index in range(len(room_info_list)):if index == 0:room_count = room_info_list[index]    //?房?室?厅if index == 1:room_square = room_info_list[index]     //房源面积print("=========room_count:" + room_count)print("=========room_square:" + room_square)other_info_list = html.select("ul.f14")[0].select("li")[2].select("span")[1].string.strip().split()for index in range(len(other_info_list)):if index == 0:orientation = other_info_list[index]if index == 1:room_floor = other_info_list[index]print("=========orientation:" + orientation)   //朝向print("=========room_floor:" + room_floor)   //楼层microdistrict_span = html.select("ul.f14")[0].select("li")[3].select("span")[1].select("a")if microdistrict_span:if microdistrict_span[0].string:microdistrict = microdistrict_span[0].string.strip()   //所在小区print("=========microdistrict:" + microdistrict)house_district_span = html.select("ul.f14")[0].select("li")[4].select("span")[1].select("a")if house_district_span:house_district = house_district_span[0].string.strip()      //所在地区print("=========house_district:" + house_district)house_location_span = html.select("ul.f14")[0].select("li")[4].select("span")[1].select("a")if len(house_location_span) > 1 :house_location = house_location_span[1].string.strip()    //房源所在地址print("=========house_location:" + house_location)house_addr = html.select("ul.f14")[0].select("li")[5].select("span")[1].string.strip()   //房源详细地址print("=========house_addr:" + house_addr)pic_url = html.select("#smainPic")[0]["src"]   //图片print("=========pic_url:" + pic_url)print("getid===" + str(house_id) + "success")   csv_writer.writerow([house_id, house_title, house_type,room_count, room_square, house_location,house_addr, house_price, house_district,pay_method, orientation, room_floor,microdistrict, pic_url, house_url])

这里主要用到的是csv库的读写。爬取到的csv文件长下面这样:

这是在Notepad++打开的效果。由于是按价格区间爬取的,所以爬下来的是按照价格区间进行分类的多个csv文件。为了便于操作,我将全部房源数据导入MySql数据库中,也方便数据清洗。

如上图,这样看数据就规整多了。一共爬下了16445条房源数据~

二、数据清洗
接着进行简单的数据清洗,这里主要是把过分夸大的数据给清洗掉。

例如,利用select语句找出room_square>600的房源记录,发现数据有夸大的成分,房价与房源面积的关系不符合客观事实,因此我们可以把这种脏数据直接删除掉。
再者,由于爬虫的时候没有考虑爬经纬度,所以只能在做热力图的时候,利用网上的工具生成经纬度啦~这里就为了能较准确地利用house_location生成经纬度,也对house_location做了处理:

利用update语句将没有标明“广州”的地址都为其加上城市名前缀,这里是用concat实现连接。

数据清洗可以结合自己想要实现的分析功能来进行,还有其他可能需要清洗的字段,这个视分析对象、分析目的而定。

三、可视化分析
1.热力图

由热力图不难得出,广州市中心地区(越秀区和海珠区)房价最高,天河区及周边次之。从整体来看,房价由市中心向外围逐渐降低,符合我们了解的客观事实。
2. 利用其他图表分析房租变化的影响因素

2.1 利用折线图分析合租或整租情况下,房价随房源面积的变化。

①从折线图中,我们可以得到结论:合租时,选取40-140平方米的房源会更加划算;而整租时,则适合选取房源面积小的,最好在0-40平方米这个区间。

折线图反映的整体规律符合我们的客观认识:整租时租金随房源面积的增加而增加,而合租由于个人可能只是租到其中的单间,所以大体上租金不受房源面积的影响。

②利用条形图直观体现不同地区的房租高低。结果和我预想的差不多,无论是合租还是整租,前三名妥妥的都是越秀海珠天河(越秀区的合租平均租金仅比海珠区低6块钱),这三个区整租时的平均租金均超过了3000,越秀区竟然超过了4000!!!看来以后要在这三个区,最好还是合租或者租个小单间。
③上面这个dashboard还可以实现联动。

2.2 好奇地利用各种图表来看看朝向、房间数、客厅数、卫生间数对租金的影响。
①条形图-朝向:整租时一般不用考虑朝向,而合租时因为租的算是单间啦,朝向可是个很重要的因素哦。从条形图我们也可以看出,合租时,南、东南、南北、西南这些带有“南”的,平均房租会比较高。而整租的时候,就没有这种规律啦。

②面积图-房间数:合租时3室、4室、5室的租金相对会较高,但总体上合租时房间数的多少不会对租金有太大影响,因为合租一般就是租个单间;而整租的话,1-2个人建议租1-2室。大家庭住的话6室和8室比较划算,8室的均价最低。

③折线图-客厅数:0厅毋庸置疑是最便宜的,而一定要带厅的话,合租时1厅和2厅的租金差距不大,整租时选择1厅的租金比较能接受,5厅的性价比最高。

④色带图-卫生间数:让我觉得不可思议的是,合租时0卫的租金居然比1卫略低那么一点点?其实卫生间数的多少似乎对合租租金没多大影响。再来看整租,带卫的房源租金要比不带卫的租金高,且除了5卫和8卫的租金略低外,房租随卫生间数的增加而增加。看来,卫生间对房租的影响还是挺大的!

⑤眼尖的人可以发现,我在色带图的右上方还放置了个过滤器
想具体找某个地区的房源就可以直接挑选**区进行联动啦!这次分析就先在这里告一段落啦~由于爬的数据量不大,且数据较零散,所以可能有一些分析结果存在数据干扰。

了解更多分析及数据抓取可查看:
http://cloud.yisurvey.com:9081/html/529942a8-212c-4c85-9c92-9c56beb4a299.html?ly=csdn
本文转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请联系我们删除处理。
特别说明:本

58同城数据爬取+可视化分析相关推荐

  1. 网络爬虫分析实例:基于音悦台网站榜单的数据爬取与分析

    基于音悦台网站榜单的数据爬取与分析 本实验代码:进入 一.研究背景 在互联网发展初期,网站相对较少,信息查找比较容易.然而伴随互联网爆炸性的发展,普通网络用户想找到所需的资料简直如同大海捞针,这时为满 ...

  2. python网络数据爬取及分析从入门到精通pdf_Python网络数据爬取及分析从入门到精通...

    这是一套以实例为主.使用Python语言讲解网络数据爬虫及分析的实战指南.本套书通俗易懂,涵盖了Python基础知识.数据爬取.数据分析.数据预处理.数据可视化.数据存储.算法评估等多方面知识,每一部 ...

  3. Python网络数据爬取及分析-智联招聘

    python网络数据爬取及分析-智联招聘 一. 数据爬取 智联招聘是一家面向大型公司和快速发展的中小企业提供一站式专业人力资源的公司,可在智联招聘网站上根据不同城市.不同职位需求搜索得到相关招聘信息. ...

  4. 2019FME博客大赛——为数据而生的FME - 腾讯人口迁徙数据爬取与分析

    参赛单元:互联网.大数据及云计算 作者:刘啸 单位:上海垣观数据科技有限公司 随着信息技术的发展,大数据的概念越来越引发人们的关注,各种有关于城市的新数据类型也不断涌现,为客观认识城市系统并总结其发展 ...

  5. 手把手教-网络时空大数据爬取与分析DAS系统(瓦片地图获取)

    手把手教 | 网络时空大数据爬取与分析DAS系统(瓦片地图获取) 原创 DAS Team 双评价DAS 地理计算语言,为大众赋能地理智慧. --DAS Team 爬取分析DAS系统下载 地址: htt ...

  6. 【完整版】2019h1深圳二手楼市热度如何?(数据爬取、分析建模)

    2019h1深圳二手楼市热度如何?(数据爬取.分析&建模) 文章目录 2019h1深圳二手楼市热度如何?(数据爬取.分析&建模) 一.数据爬取 1.1 多进程爬取2w+深圳已成交二手房 ...

  7. php爬虫:知乎用户数据爬取和分析

    php爬虫:知乎用户数据爬取和分析 2016-04-10    PHP开发者     (点击上方公众号,可快速关注) 作者:崔小拽        原文链接:http://cuihuan.net/art ...

  8. python爬虫实战三:近十年中国电影票房数据爬取与分析

    近十年中国电影票房数据爬取与分析 前言 爬取 分析 十年top10 年度top5 每年电影数 每年总票房 二八原则 代码与数据 前言 这篇文章主要讲述的是近十年(2010-2019)中国电影票房数据的 ...

  9. bilibili助手C2C服务器,Bilibili (B站)200万用户数据爬取与分析(附源码)

    原标题:Bilibili (B站)200万用户数据爬取与分析(附源码) 数据挖掘入门与实战 公众号: datadw 该爬虫仅供学习使用 B站用户爬虫 B站视频爬虫 B站弹幕下载器 关注并回复公众号da ...

最新文章

  1. Ubuntu 中的 dpkg 安装deb、删除deb、显示已安装包列表、解压deb文件、显示deb包内文件列表、配置deb软件包
  2. Ts + React + Mobx 实现移动端浏览器控制台
  3. uestWrapper.getSession(HttpServletRequestWrapper.java:241) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
  4. 一文弄懂各大池化Pooling操作
  5. 8-th Android开发之服务器端
  6. 【软件工程】关于计算机的一些问答与思考
  7. Mockito教程--思维导图笔记
  8. 解决 sessionStroage 无法在多个标签页共享数据的问题
  9. 信息学奥赛一本通 1195:判断整除 | OpenJudge 2.6 3531:判断整除
  10. [swustoj 771] 奶牛农场
  11. 在excel工作表中c1单元格_Excel工作表中的11个逻辑函数应用技巧,中文解读,动图演示!...
  12. 复习Javascript专题(三):面向对象(对象的创建与继承,原型及原型链)
  13. mouseenter 事件
  14. Android视频编码的坑
  15. 没有IDEA与Eclipse,该怎么学Java?
  16. AIS (船舶自动识别系统Automatic Identification System)数据解析
  17. mysql虚拟列表_动态网页制作-官方版合集下载-多特
  18. 关于安装SQLServer2012时遇到1402错误,未能打开注册表项的解决方法
  19. linux字符集设置为英文,NLS_lang参数设置-linux设置字符集(国外英文资料).doc
  20. 防止PayPal帐号冻结和解冻的经验

热门文章

  1. java程序员工资有多少?java程序员现状如何?
  2. Bachelor's song
  3. 第十六章 没有银弹 ---软件工程中的根本和次要问题
  4. 锐聘学院oracle上机题
  5. 【Coding】Latex添加表格注释footnote
  6. 网站建设|网站导航设计超强方法总结
  7. 诊断2018微商:从乱象到赋能,世界微商大会发明的新玩法为您指路
  8. 2.6 springBoot学习笔记(2.6)——- 整合mybatisPlus
  9. 计算机二级考试 信息学奥赛,如何快速区分五大学科竞赛等级
  10. java语音从哪里开始学_想学习编程,应该从哪里开始学习呢?