Python实现爬取房源信息的示例详解

Python实现爬取房源信息的示例详解

1. 准备工作

在开始实现爬取房源信息的示例之前,你需要进行以下准备工作:

  1. 安装Python环境

如果你尚未安装Python环境,可以前往Python官网下载你所需要的版本。

  1. 安装第三方包

我们使用requestsBeautiful Souppandas这三个第三方包来进行数据抓取和数据处理。你可以使用以下命令分别安装:

pip install requests
pip install beautifulsoup4
pip install pandas

2. 示例1:抓取链家网房源信息

2.1 网站分析

我们以链家网为例进行数据抓取。首先,我们需要了解链家网的网页结构。

我们以北京市丰台区的房源信息页面为例:https://bj.lianjia.com/ershoufang/fengtai/pg1/

该页面列举了丰台区所有在售二手房的信息。我们可以看到,该页面的URL结构如下:

https://bj.lianjia.com/ershoufang/fengtai/pg1/

其中,fengtai表示查询的区域,pg1表示当前查询的页数。我们可以通过修改pg后的数字来访问不同的页面。

同时,我们可以观察到该页面中包含多个房源信息的块,每个块内包含了房源的基本信息和价格信息。

2.2 抓取数据

接下来,我们将编写Python代码来抓取链家网的房源信息。代码如下:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 设置请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
}

# 构造URL
url_template = "https://bj.lianjia.com/ershoufang/{region}/pg{page}/"
region = "fengtai"

# 创建一个空DataFrame,用于存储数据
house_df = pd.DataFrame(columns=["title", "house_type", "area", "orientation", "decoration", "elevator", "unit_price", "total_price"])

# 循环抓取不同页码的数据
for page in range(1, 6):
    url = url_template.format(region=region, page=page)
    response = requests.get(url, headers=headers)
    html = response.text
    soup = BeautifulSoup(html, "html.parser")
    house_list = soup.find_all("div", class_="info clear")

    # 解析房源信息
    for house in house_list:
        # 解析基本信息
        title = house.find("div", class_="title").text.strip()
        house_type = house.find("div", class_="houseInfo").text.strip()
        area = house.find("div", class_="area").text.strip()
        area = float(area.split("㎡")[0])
        orientation = house.find("div", class_="houseInfo").find_all("a")[0].text.strip()
        decoration = house.find("div", class_="houseInfo").find_all("a")[1].text.strip()

        # 解析价格信息
        elevator = house.find("div", class_="positionInfo").text.strip().split("-")[0]
        unit_price = house.find("div", class_="unitPrice").text.strip()
        unit_price = float(unit_price.split("单价")[1].split("元")[0])
        total_price = house.find("div", class_="totalPrice").text.strip().split("万")[0]
        total_price = float(total_price)

        # 将数据存入DataFrame
        house_df.loc[len(house_df)] = [title, house_type, area, orientation, decoration, elevator, unit_price, total_price]

# 输出数据到CSV
house_df.to_csv("house.csv", index=False, encoding="utf_8_sig")

上面的代码中,我们使用了requestsBeautiful Soup来抓取链家网上丰台区的房源信息。我们首先定义了一个请求头,然后通过循环构造不同页码的URL来抓取多个页面上的房源信息。

在解析房源信息时,我们使用了findfind_all方法来定位元素,并进行解析。通过这些方法,我们可以轻松地获取房源信息,并将其存储在一个DataFrame对象中。

最后,我们将DataFrame对象输出到CSV文件中。

2.3 数据处理

我们可以使用pandas库对数据进行进一步的处理和分析。下面是一个简单的数据处理代码示例:

import pandas as pd

# 读取CSV文件
df = pd.read_csv("house.csv")

# 计算平均单价和总价
avg_unit_price = df["unit_price"].mean()
total_price = df["total_price"].sum()

# 分析房型数据
house_type_counts = df["house_type"].value_counts()

# 输出统计结果
print("平均单价:{:.2f}元/㎡".format(avg_unit_price))
print("总价:{:.2f}万".format(total_price))
print("房型分布:")
print(house_type_counts)

上面的代码读取了保存在CSV文件中的房源信息,并对其进行了进一步的处理和分析。我们可以计算出平均单价和总价,以及分析出不同房型的分布情况。

3. 示例2:抓取安居客网房源信息

3.1 网站分析

安居客网是另一个提供房源信息的网站。我们以安居客网北京市丰台区的房源信息页面为例:https://bj.fang.anjuke.com/loupan/fengtai/

该页面列举了丰台区的新房楼盘信息。我们可以看到,该页面的URL结构如下:

https://bj.fang.anjuke.com/loupan/fengtai/p1/

其中,fengtai表示查询的区域,p1表示当前查询的页数。我们可以通过修改p后的数字来访问不同的页面。

同时,我们可以观察到该页面中包含多个房源信息的块,每个块内包含了楼盘的基本信息和价格信息。

3.2 抓取数据

与示例1类似,我们可以使用Python代码来抓取安居客网的房源信息。代码如下:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 设置请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
}

# 构造URL
url_template = "https://bj.fang.anjuke.com/loupan/{region}/p{page}/"
region = "fengtai"

# 创建一个空DataFrame,用于存储数据
house_df = pd.DataFrame(columns=["title", "house_type", "area", "decoration", "price"])

# 循环抓取不同页码的数据
for page in range(1, 6):
    url = url_template.format(region=region, page=page)
    response = requests.get(url, headers=headers)
    html = response.text
    soup = BeautifulSoup(html, "html.parser")
    house_list = soup.find_all("div", class_="item-mod")

    # 解析房源信息
    for house in house_list:
        # 解析基本信息
        title = house.find("div", class_="items-name").text.strip()
        house_type = house.find_all("p")[0].text.strip()
        area = house.find_all("p")[1].text.strip()
        decoration = house.find_all("p")[2].text.strip()

        # 解析价格信息
        price_tag = house.find("span", class_="price-det")
        price = price_tag.text.strip() if price_tag else "未知"

        # 将数据存入DataFrame
        house_df.loc[len(house_df)] = [title, house_type, area, decoration, price]

# 输出数据到CSV
house_df.to_csv("house.csv", index=False, encoding="utf_8_sig")

上面的代码中,我们使用了requestsBeautiful Soup来抓取安居客网上丰台区的房源信息。通过循环构造不同页码的URL来抓取多个页面上的房源信息。

在解析房源信息时,我们使用了findfind_all方法来定位元素,并进行解析。通过这些方法,我们可以轻松地获取房源信息,并将其存储在一个DataFrame对象中。

最后,我们将DataFrame对象输出到CSV文件中。

3.3 数据处理

类似地,我们可以使用pandas库对数据进行进一步的处理和分析。下面是一个简单的数据处理代码示例:

import pandas as pd

# 读取CSV文件
df = pd.read_csv("house.csv")

# 计算平均价格
avg_price = df["price"].map(lambda x: float(x.split("元/㎡")[0])).mean()

# 分析楼盘类型数据
house_type_counts = df["house_type"].value_counts()

# 输出统计结果
print("平均价格:{:.2f}元/㎡".format(avg_price))
print("楼盘类型分布:")
print(house_type_counts)

上面的代码读取了保存在CSV文件中的房源信息,并对其进行了进一步的处理和分析。我们可以计算出平均价格,以及分析出不同楼盘类型的分布情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现爬取房源信息的示例详解 - Python技术站

(1)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 详解pyqt中解决国际化tr()函数不起作用的问题

    下面我将详细讲解如何解决 PyQt 中 tr() 函数不起作用的问题。 问题描述 PyQt 中的 tr() 函数是用于实现国际化的函数,但有时候在程序中使用 tr() 函数时,它却不起作用,导致界面不能实现国际化。 解决方案 解决这个问题的方法是需要使用 PyQt 中提供的 QTranslator 类来加载翻译文件。具体步骤如下: 创建一个翻译器 在 PyQ…

    python 2023年6月6日
    00
  • Python for循环生成列表的实例

    Python for循环生成列表的实例 在Python中,我们可以使用for循环来生成列表。这种方法可以让我们更加灵活地控制列表的生成过程,而满足不同的需求。本攻略将详细介绍如何使用for循环生成列表,并提供两个例说明。 生成列表 我们可以使用for循环生成数字列表。以下是一个示例代码,演示如何使用for循环生成数字列表: # 生成列表 my_list = …

    python 2023年5月13日
    00
  • 详解用python -m http.server搭一个简易的本地局域网

    用 Python http.server 搭建一个简易的本地局域网 在 Python 中,可以使用内置模块 http.server 来搭建一个简易的本地局域网。以下是详解用 Python http.server 搭建一个简易的本地局域网的方法。 1. 启动 http.server 首先,我们需要在终端中进入到要共享的文件夹目录下,然后使用以下命令启动 htt…

    python 2023年5月15日
    00
  • 常用的Python代码调试工具总结

    下面是一份详细的“常用的Python代码调试工具总结”的攻略,包括常用的调试技巧、调试工具和示例。 常用的调试技巧 打印日志 使用打印日志是最基本的调试技巧之一。通过在代码中添加打印语句输出变量的值,可以清楚地了解程序执行过程中变量的变化情况。同时,打印日志也可以帮助我们定位代码中的错误。在 Python 中,可以使用内置的 logging 模块来进行打印日…

    python 2023年5月19日
    00
  • Python变量名详细规则详细变量值介绍

    Python变量名详细规则详细变量值介绍 Python变量的定义 在Python中,定义一个变量只需要给它赋值即可。比如:a = 1 Python变量命名规则 Python变量名必须是以字母或者下划线_开头,后面可以跟任意数量的字母、数字或者下划线。 以下是Python变量名的规则: 变量名必须以字母或者下划线 _ 开头 变量名不能以数字开头 变量名只能包含…

    python 2023年5月13日
    00
  • Python中requests.session()的用法小结

    以下是关于Python中requests.session()的用法小结的攻略: Python中requests.session()的用法小结 requests.session()是requests库中的一个类,用于创建一个会话对象,可以在多个请求之间保持cookie和其他信息。以下是Python中requests.session()的用法小结的攻略: 创建会…

    python 2023年5月14日
    00
  • Django中数据在前后端传递的方式之表单、JSON与ajax

    Django是一款使用Python语言开发的极具人气的Web框架,它提供了一系列的数据在前后端之间传递的方式,常用的方式包括表单、JSON与ajax。本文将为大家详细讲解这三种方式的用法和区别。 表单 表单是Web开发中最常用的数据收集和传递方式之一,它能够将用户输入的数据收集,并传递给后端。在Django中,我们可以通过HTML表单实现数据在前后端的传递。…

    python 2023年6月3日
    00
  • python 在sql语句中使用%s,%d,%f说明

    Python中可以使用%s,%d,%f等占位符表示字符串、整数和浮点数,以便于在SQL语句中动态地插入传递的值。下面是详细讲解: 字符串占位符%s 在SQL语句中,可以使用%s占位符表示动态传递的字符串。在Python编程中,可以使用字符串拼接或格式化字符串的方式来动态生成SQL语句。例如: name = ‘Lucy’ age = 20 sql = &quo…

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部