Python爬取房天下网站深圳房租信息入库并进行数据分析可视化

概述

  • 请求库:requests
  • HTML 解析:BeautifulSoup
  • 词云:wordcloud
  • 数据可视化:pyecharts
  • 数据库:MongoDB
  • 数据库连接:pymongo

爬虫思路&&页面解析

先爬取房某下深圳各个板块的数据,然后存进 MongoDB 数据库,最后再进行数据分析。

![](https://img-blog.csdnimg.cn/20181211110713956.png?x-oss-

process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpblJ1aUM=,size_16,color_FFFFFF,t_70)

右键网页,查看页面源码,找出我们要爬取得部分

![](https://img-blog.csdnimg.cn/20181211111200331.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpblJ1aUM=,size_16,color_FFFFFF,t_70)

爬虫源代码实现

    import requests
    from bs4 import BeautifulSoup
    import time
    from pymongo import MongoClient
    
    class HouseSpider:
        def __init__(self):
            self.client = MongoClient('mongodb://localhost:27017/')
            self.zfdb = self.client.zfdb
    
        session = requests.Session()
        baseUrl = "http://sz.zu.fang.com"
    
        # 每个区域的url
        urlDir = {
            "不限": "/house/",
            "宝安": "/house-a089/",
            "龙岗": "/house-a090/",
            "南山": "/house-a087/",
            "福田": "/house-a085/",
            "罗湖": "/house-a086/",
            "盐田": "/house-a088/",
            "龙华区": "/house-a013080/",
            "坪山区": "/house-a013081/",
            "光明新区": "/house-a013079/",
            "大鹏新区": "/house-a013082/",
            "惠州": "/house-a013058/",
            "东莞": "/house-a013057/",
            "深圳周边": "/house-a016375/",
        }
    
        region = "不限"
        page = 100
        # 通过名字获取 url 地址
        def getRegionUrl(self, name="宝安", page=10):
            urlList = []
            for index in range(page):
                if index == 0:
                    urlList.append(self.baseUrl + self.urlDir[name])
                else:
                    urlList.append(self.baseUrl + self.urlDir[name] + "i3" + str(index + 1) + "/")
            return urlList
    
    
        # MongoDB 存储数据结构
        def getRentMsg(self, title, rooms, area, price, address, traffic, region, direction):
            return {
                "title": title,  # 标题
                "rooms": rooms,  # 房间数
                "area": area,  # 平方数
                "price": price,  # 价格
                "address": address,  # 地址
                "traffic": traffic,  # 交通描述
                "region": region,  # 区、(福田区、南山区)
                "direction": direction,  # 房子朝向(朝南、朝南北)
            }
    
        # 获取数据库 collection
        def getCollection(self, name):
            zfdb = self.zfdb
            if name == "不限":
                return zfdb.rent
            if name == "宝安":
                return zfdb.baoan
            if name == "龙岗":
                return zfdb.longgang
            if name == "南山":
                return zfdb.nanshan
            if name == "福田":
                return zfdb.futian
            if name == "罗湖":
                return zfdb.luohu
            if name == "盐田":
                return zfdb.yantian
            if name == "龙华区":
                return zfdb.longhuaqu
            if name == "坪山区":
                return zfdb.pingshanqu
            if name == "光明新区":
                return zfdb.guangmingxinqu
            if name == "大鹏新区":
                return zfdb.dapengxinqu
    
        #
        def getAreaList(self):
            return ["不限","宝安","龙岗","南山","福田","罗湖","盐田","龙华区","坪山区","光明新区","大鹏新区",]
    
        def getOnePageData(self, pageUrl, reginon="不限"):
            rent = self.getCollection(self.region)
            self.session.headers.update({
     
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 安居客出租(武汉为例)爬虫+数据分析+可视化 这个爬虫是我前段时间在淘宝上做单子的时候遇见的一个客户需求。本来以为就是一个简单的爬虫项目。但后面客户加了数据清洗和数据分析的要求。而后又加了要详细代码解释的需求等等。直到最后客户坦白说这是他们大专的毕设.......但是这个单子坐下来只有200左右,我想了一下,感觉好亏啊。在淘宝上随便找一个做毕设的都要好多钱的,而且客户本身的代码能力、数学、逻辑能力都很差,导致我每行都给注释以及看不懂,在我交付代码后又纠缠了我一个多礼拜。反正总体做下来的感觉就是烦躁。头一次感觉到了客户需求变更带来的巨大麻烦。 总之这是一次不是很愉快的爬虫经历。但是作为我写爬虫以来注释最详细的一次,以及第一次真正使用像matplotlib这种数据分析库的代码,我认为还是有必要分享出来给大家当个参考的(PS:大佬轻拍~)。爬虫本身几乎没有什么难度,写的也比较乱,敬请见谅。 **功能** 爬取安居客上的出租信息(武汉地区的),并通过爬取的数据进行数据清洗以及数据分析。给出四个不同层面的可视化图。最终结果如下图所示: ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/1.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/2.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/3.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/4.png) **环境** 1. Windows 10 2. python3.7 **使用方法** 首先声明该爬虫由于是特定情况下写的,所以本身的通用性特别差,仅可以对安居客网站上的武汉的出租信息进行爬取,且需要自己手动更新cookie。同时在对数据进行分析及可视化的时候由于也是特别针对武汉出租进行的,所以针对性也比较强。如果别的需求需要自己进行更改。 1. 访问[安居客网址](https://wuhan.anjuke.com/),获取cookie。 > tip:获取cookie的方法可根据[此链接](https://jingyan.baidu.com/article/5d368d1ea6c6e33f60c057ef.html) 2. 在项目中找到`spider.py`的文件,将第12行的cookie换成你自己的cookie。 3. 运行`spider.py`,获取信息。运行后应会产生一个`武汉出租源情况.csv`的文件。此文件为我们从安居客上爬取信息,其中包含`屋租住链接、屋描述、屋地址、屋详情(户型)以及经纪人、屋价格`五个属性。 4. 在获取了数据之后我们运行`matplotlib.py`文件。进行数据清洗,分析,可视化。运行后即可获得**功能**中展示四个图片。 **技术栈** 1. request 2. parsel 3. pandas 4. matplotlib **进步(相比之前)** 此次爬虫相比之前的技术上可以说有减无增。但其中注释相当详细,可谓是每行代码都有注释。所以对于初学者应该有一些用处。同时使用matplotlib进行数据分析可视化等。对于数据处理的代码的注释也是几乎每行都有注释的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值