数据分析实战项目--链家租房数据可视化分析

本文介绍了一个使用Python爬虫抓取链家租房数据并进行数据清洗及可视化分析的实战项目。通过requests、BeautifulSoup和正则表达式爬取网页信息,存储到SQLite数据库,再用pandas和pyecharts进行数据清洗和可视化,分析了地区、小区、户型和交通等维度的租房市场状况。
摘要由CSDN通过智能技术生成

导语:前几天舍友送了一本介绍正则表达式的书籍,由此联想到,好久没有爬过网站了,但之前学的东西差不多全还给秦老板了(给我们上python的老师)。于是立马上网找了几篇博客,重温了一下几个包的知识点,动了一下小手,这不就有了等下要和你们讲的故事喽。

(一)项目介绍

1. 工具

        pycharm 2020.1.5

2. 内容

        本项目分为两部分:爬虫 + 数据可视化分析

        (1)爬虫:用requests包爬取链家租房网页内容——BeautifulSoup解析——re正则表达式匹配我们需要的内容——sqlite3保存数据

        (2)数据可视化分析:pandas清洗分析数据——pyecharts进行可视化分析

(二)爬虫部分

(1)爬虫第一步,了解我们将要爬取网页的信息

         如图所示:小框是链家网页租房的网址,大框是我们想要从网页中获取的内容。

         

        由于链家的限制, 把页面往下拉到底部就可以看见,一次最多只能访问100页,一个页面有30套房,就是说,我们一次最多能看见3000套房子的信息。但是实际上的租房房源远不3000。怎么办呢?我们可以通过增加限制条件来获取到尽量全的房源。

        比如按照区域来爬取网页,而不是所有一次性大杂烩爬取,这样可以大大提高我们爬取房源的数量。不过按照区域爬取网页的话,网址也会有相应的改变。下图就是按照区域查看网页的内容,可以看出,这样子网页的url =  https://bj.lianjia.com/zufang/ + 区域拼音 + /pg + 相应网页页数 + /

        现在问题又来了,按区域爬虫,区域我们是确定知道的,因为北京统共就那么几个区,但是网址中还需要知道各个区域的页数,各个区域的页数又不相同,那么各个区域分别有多少页呢?这里我用了一个比较笨的方法,但方法虽笨,实现还是挺简单的,就是先爬取每个区域的第一页,页面的最后有显示最大网页数,由此我们就可以得到最大网页数。现在先Fn+F12一下来看看网页的html文件吧~

        从上图,我们可以看出页数的信息在div class="content__pg"下面的内容,由此我们可以据其写出正则匹配表达式,并在div class="content__pg"下面的内容找到最大页数。

        本次爬虫用的是requests包,首先构造一个响应头部header,用于伪装,然后构造get请求并发起,将爬取下来的数据存于html中,详见代码ask_url函数。

        在get_page函数中调用ask_url函数,循环爬取每个区的第一页,一边爬一边用BeautifulSoup解析,并在解析过的数据中,用re.findall()在div class="content__pg"下面的内容匹配找出最大页数。get_page函数中用了两个for循环,一个调用regions中的区,然后爬虫,一个用来查找爬取内容的最大页数。(本次爬虫的限制条件,即区域,只有13个,其他4个较为边缘的区没有计入)

import requests
from bs4 import BeautifulSoup
import re
import sqlite3
import pandas as pd
 
def main():
    baseurl = 'https://bj.lianjia.com/zufang/'
    pagelist = get_page(baseurl)                    #得到每个区的页数
    datalist = get_data(baseurl, pagelist)          #得到所有数据
    dbpath = "zufang.db"
    savedata_2_db(datalist, dbpath)                 #存入数据库
 
findpage = re.compile(r'data-totalpage="(\d
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值