【爬虫+可视化】租房难?pandas_bokeh助你快速筛选!

一年一度的秋招大战已经吹响号角,想必大多数毕业生正在为找到一份心仪的工作而努力准备,笔者先在此祝各位offer多多!然而,找到工作并不意味着就可以马上“躺平”,不是每家公司都有“包住宿”的福利,因此,找房也就成了许多毕业生进入社会之后的头等大事。

“年轻人的第一次崩溃从租房开始”不是说说而已,租房需要考虑的因素可不少,租金、基础设施、通勤时长、小区环境、房东人品等都会影响租房的体验感,如何找到合适的房源是一项不小的课题,借助Python可以大大减轻我们的工作量。本文将以链家网为例,爬取武汉地区的租房信息,并使用pandas_bokeh库在地图上标注,方便大家定位房源。话不多说,马上开始!

一、爬取租房信息

首先,进入武汉链家网(https://wh.lianjia.com/),选择右上角菜单中的“租房”,进入我们需要爬取数据的具体页面。

在租房页面中,通过切换页码,可以发现网页链接的规律,第n页对应的页面编码为pg{n},由此构建url。

url = 'https://wh.lianjia.com/zufang/' + 'pg' + str(i) + '/' + '#contentList'

其次,查看页面中需要爬取的内容,使用右键检查功能定位到具体的标签。以标题信息为例,其对应的class为’twoline’,因此,使用BeautifulSoup找到所有class为’twoline’的元素,并提取它们的文本内容。

然后将提取的文本内容进行去除首尾空格的处理,并将结果存储在一个名为rent_title的列表中。其余的页面信息爬取思路与之类似。在此我们分别爬取了房源信息标题rent_title、房源描述rent_des和房租rent_price,本次只爬取前10页的内容作为例子,代码及结果如下:

import pandas as pd
import json
import requests
from bs4 import BeautifulSoup
import re,sys
from fake_useragent import UserAgent
import importlib
importlib.reload(sys)

BASE_URL = 'https://wh.lianjia.com/zufang/'
# 页面数
PAGE_SIZE = 10
# 定义函数构造每一页内容url
def creat_conttentList_html(i):
        url = BASE_URL + 'pg' + str(i) + '/' + '#contentList'
        return url

# 访问url 发送请求
def get_html(url):
    # 请求头 用来伪装浏览器请求
    headers = {
        'Cookie': '用户自己的cookie',
        'Referer': 'https://wh.lianjia.com/zufang/',
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"
    }
    # 发送请求
    response = requests.get(url=url,headers=headers)
    if response.status_code ==200:
        # 返回响应内容
        html = response.text
        print(html)
        return html
    else:
        print("网页出现错误")

data = []
# 定义函数用bs4解析提取数据
def extract_info(html):
    # bs4解析网页
    soup = BeautifulSoup(html, 'html.parser')
    # 提取标题
    rent_title = [item.get_text().strip() for item in soup.find_all(class_='twoline')]
    # print(rent_title)
    # print(len(rent_title))
    # 提取描述信息
    rent_des = [item.get_text().strip().replace("/", "").replace(" ", "") for item in
                soup.find_all('p', class_='content__list--item--des')]
    # print(rent_des)
    # print(len(rent_des))
    # 租金价格
    rent_price = [item.get_text().strip() for item in
                  soup.find_all('span', class_="content__list--item-price")]
    # print(rent_price)
    # print(len(rent_price))
    for i in range(len(rent_price)):
        data.append([rent_title[i],rent_des[i],rent_price[i]])
    return data
    
   # 保存数据
def save_data(data):
    columns = ['rent_title','rent_des','rent_price']
    df = pd.DataFrame(data,columns=columns)
    # 将数据保存到excel中
    df.to_excel('武汉租房.xlsx',encoding='utf-8')
    
# 运行主程序
if __name__=='__main__':
    # 循环遍历 获取10页数据
    for i in range(1,PAGE_SIZE+1):
        url = creat_conttentList_html(i)
        html = get_html(url)
        extract_info(html)
        save_data(data)
        print("正在抓取第{}页".format(i))

二、获取房源经纬度

在初步爬取获得的数据中,rent_des一列中的信息包含了地址、房屋面积、朝向、户型和楼层数等信息,通过数据清洗(具体步骤可在后台留言索取),将数据分列,得到地址rent_address、面积rent_area、朝向rent_orien、户型rent_room、层级rent_level、层数rent_floor几列信息,结果如下:

接着,我们调用高德API,使用其中的地理编码功能,根据房屋地址rent_address获取经纬度,代码和结果如下:

import pandas as pd
import requests
import time
import csv
import json
 
def gaode(addr):
        para = {
            'key':'用户自己的key',  #高德地图开放平台申请的key
            'address':addr #传入地址参数
        }
        url = 'https://restapi.amap.com/v3/geocode/geo?' #高德地图API接口
        req = requests.get(url,para)
        req = req.json()
        print('-' * 30)
        m = req['geocodes'][0]['location']
        print(m)
        return m
#gaode(addr="武汉")

df2 = pd.read_excel('武汉租房.xlsx') #读取地址数据
time_start = time.time()
df2['经纬度'] = df2['rent_address'].apply(gaode) #调用函数
time_end = time.time()
t = time_end-time_start
print('共用时%s秒'%t)
# 将数据保存到excel中
df2.to_excel('武汉租房经纬度.xlsx',encoding='utf-8')

三、数据可视化

获得了经纬度,我们就可以开始绘制地图了。本次数据可视化使用到的库为pandas_bokeh。首先我们简单了解一下Bokeh库,这是一个交互式可视化库,与之前介绍的Altair库《Python交互式数据可视化——酷炫的Altair库》功能类似,但是Altair库在处理超过5000个以上样本的数据集时,需要先对数据进行汇总,并且缺乏一些可选的样式,具有一定的局限性。相比之下,Bokeh库拥有更加灵活的制图选项,能够创建功能更丰富、效果更美观的图片。pandas_bokeh则是在Bokeh库的基础上,增添了直接与pandas库的连接,使得从数据集到图表的代码更加简洁流畅,库的安装、调用与基本语法如下:

pip install pandas-bokeh
import pandas as pd
import pandas_bokeh
df.plot_bokeh(kind="图形类型")  
df.plot_bokeh.图形类型(...) #另一种绘图语法
#图形类型可选line、point、step、scatter、bar、hist、area、pie、map

目前pandas_bokeh库支持绘制线型图、直方图、散点图、饼图和地图等八种类型的图形,感兴趣的朋友可以进入官方文档查看详细的介绍(GitHub - PatrikHlobil/Pandas-Bokeh: Bokeh Plotting Backend for Pandas and GeoPandas)。

接下来,我们以绘制地图为例,展示pandas_bokeh强大的交互式可视化功能。我们希望得到的效果是在地图上标注出各个房源的地点,具体地,使用经纬度与地图上的位置进行匹配,并用散点标记,点的大小表示房屋的面积rent_area,颜色表示楼层高度等级rent_level,房屋的户型、租金和楼层数在点的标签里进行展示。

# 导入工具包
import pandas_bokeh
import pandas as pd
import numpy as np
import math

# 读取数据
data = pd.read_excel('C:/Users/wenhe/Desktop/Bokeh数据可视化/武汉租房经纬度.xlsx',index_col=0)

# 创建新变量
data["size"] = data["rent_area"] / 10

# 作图
#在notebook中显示可视化结果
pandas_bokeh.output_notebook()
data.plot_bokeh.map(x="lon",
                    y="lat",
                    hovertool_string="""<h2> @{rent_title} </h2> 
                    <h3> 价格: @{rent_price} </h3>
                    <h4> 楼层: @{rent_floor} </h4>
                    """,
                    tile_provider="STAMEN_TERRAIN_RETINA",
                    size="size", 
                    category="rent_level1", 
                    colormap="Viridis",
                    figsize=(1000, 600),
                    title="武汉租房房源分布")

此外,我们也可以将交互式图像导出为html格式,方便随时调取查看,注意,以下代码需要在画图命令之前执行。

#导出交互式图片
pandas_bokeh.output_file("武汉租房信息.html")

在jupyter notebook中的展示结果如下,我们可以滑动鼠标进行区域的放缩,也可以将鼠标移动至感兴趣的位置,查看对应的房源信息,这样房屋的地理位置、周围环境等信息就一览无余,对于重点考虑通勤和居住环境的求租者而言,相比点开网页中的房屋地址一条条比对,无疑方便了不少~

以上就是本次Python实战的全部内容,正在找房的你可以开始动手试试啦~最后祝各位租房人都能顺利找到“梦中情房”!

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

若有侵权,请联系删除

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python租房爬虫是指利用Python爬虫技术获取租房数据,并通过可的方式呈现出来。 首先,利用Python的爬虫库(如Requests、BeautifulSoup、Selenium等),可以编写爬虫程序来抓取各大租房网站上的房源信息。通过发送HTTP请求获取网页HTML代码,然后使用爬虫库提供的解析工具对网页进行解析,获取所需的房源数据。 接下来,通过使用Python的数据处理与分析库(如Pandas、Numpy等),可以对获取的房源数据进行清洗和整理,以便后续的可处理。 然后,使用Python的数据可库(如Matplotlib、Seaborn、Plotly等),可以将清洗后的数据进行可展示。可以通过绘制条形图、折线图或热力图等方式,直观地展示房源在不同地区、不同租金范围的分布情况。也可以通过制作地图、散点图等来显示房源的位置分布。 同时,通过Python的交互式可库(如Bokeh、Plotly等),可以编写交互式的图表,使用户可以根据自己的需求进行数据的筛选和查询,提供更灵活和个性的可应用。 最后,结合Python的Web开发框架(如Flask、Django等),可以搭建一个简单的网站或应用程序,将爬虫获取、清洗和可的数据展示出来,使用户可以在网页上直接搜索和浏览租房信息,并通过可图表对比不同房源的特点。 总之,利用Python租房爬虫可以方便地获取、分析和展示租房数据,提供给用户更直观和全面的租房信息,帮用户做出更好的租房决策。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值