爬虫实战--- (6)链家房源数据爬取与分析可视化

文章持续跟新,可以微信搜一搜公众号  rain雨雨编程 ],第一时间阅读,涉及数据分析,机器学习,Java编程,爬虫,实战项目等。

目录

前言

1. 爬取目标

2. 所涉及知识点

3. 步骤分析(穿插代码讲解)

步骤一:发送请求

步骤二:获取数据

步骤三:解析数据

步骤四:保存数据

4. 爬取结果

5. 完整代码

6 数据可视化


前言

今天我将为大家分享一个非常实用的Python项目——链家房源数据的爬取与分析可视化。在这篇文章中,我们将分为六个部分来详细讲解,包括:爬取目标、所涉及知识点、步骤分析(穿插代码讲解)、爬取结果和完整代码,以及可视化处理数据。

1. 爬取目标

本项目的目标是从链家网站上爬取二手房源的数据,并将其存储为CSV文件,然后进行后续的数据分析与可视化。我们将主要关注以下几项信息:

  • 房源标题

  • 房源价格

  • 房源位置

示例网址为:链家二手房,我们将从这个网页爬取信息。

2. 所涉及知识点

在进行爬虫项目时,我们需要掌握一些基本的知识和工具,以下是本项目中涉及的几个主要知识点:

  • 网络爬虫:了解如何向目标网页发送请求并获取数据。

  • 多页数据采集:如何获取网页上的多个页面的数据。

  • CSV文件:将爬取的数据保存为CSV文件,以便于后续分析。

  • 数据可视化:对爬取到的数据进行可视化展示,利用pyecharts等工具。

我们将使用以下几个主要的Python库:

  • requests: 用于发送HTTP请求。

  • lxml: 用于解析HTML内容。

  • pandas: 用于数据处理与分析。

  • csv: 内置模块,处理CSV文件的读写。

3. 步骤分析(穿插代码讲解)

步骤一:发送请求

首先,我们需要向目标网页发送一个请求,以获取网页的源代码。我们将在代码中伪装浏览器,以避免被网站屏蔽。

import requests

url = 'https://cs.lianjia.com/ershoufang/pg2/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
print(response)  # 输出响应状态码

这段代码定义了爬取的网址以及请求头。在请求头中,我们模拟了一些浏览器信息,以便于获取有效的响应。

步骤二:获取数据

我们可以通过response.text获取网页的HTML源代码。

# .text  文本信息
html_content = response.text

步骤三:解析数据

使用lxml库中的etree模块来解析获取到的HTML数据,并提取我们需要的信息。我们会使用XPath来便捷地选择目标元素。

from lxml import etree

et = etree.HTML(html_content)
# 使用XPath提取所有房源信息
doc = et.xpath('//*[@id="content"]/div[1]/ul/li')

list_1 = []
for li in doc:
    title = li.xpath('.//div[@class="title"]/a/text()')[0]
    price = li.xpath('.//div[@class="totalPrice totalPrice2"]/span/text()')[0]
    position = li.xpath('.//div[@class="positionInfo"]/a/text()')
    if position:
        position = '-'.join(position)
    list_1.append([title, price, position])

在这一部分代码中,我们遍历每一个房源信息,通过XPath找到标题、价格和位置,并将这些信息存储在一个列表中。

步骤四:保存数据

最后,我们将爬取到的数据保存为CSV文件,以便于后续的数据分析。

import csv
# 定义列名
headers = ['title', 'price', 'position']
for p in list_1:
    with open('ershoufang1.csv', mode='a', encoding='utf-8', newline='') as file:
        csv_writer = csv.writer(file)
        csv_writer.writerow(headers)  # 写入列名
        csv_writer.writerow(p)

使用csv模块中的writer将每条房源信息写入CSV文件中。

4. 爬取结果

通过以上代码的执行,我们将成功爬取到链家二手房源的数据,并保存到名为ershoufang1.csv的文件中。该文件将包含所有房源的标题、价格和位置等信息,便于后续进行数据分析和可视化。

5. 完整代码

下面是完整的代码,方便大家直接参考和使用。

import requests
from lxml import etree
import csv

# 发送请求
url = 'https://cs.lianjia.com/ershoufang/pg2/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
response = requests.get(url=url, headers=headers)

# 获取数据
html_content = response.text
et = etree.HTML(html_content)
doc = et.xpath('//*[@id="content"]/div[1]/ul/li')

# 解析数据
list_1 = []
for li in doc:
    title = li.xpath('.//div[@class="title"]/a/text()')[0]
    price = li.xpath('.//div[@class="totalPrice totalPrice2"]/span/text()')[0]
    position = li.xpath('.//div[@class="positionInfo"]/a/text()')
    if position:
        position = '-'.join(position)
    list_1.append([title, price, position])


# 保存数据
# 定义列名
headers = ['title', 'price', 'position']

for p in list_1:
    with open('ershoufang1.csv', mode='a', encoding='utf-8', newline='') as file:
        csv_writer = csv.writer(file)
        csv_writer.writerow(headers)  # 写入列名
        csv_writer.writerow(p)

希望通过这篇文章,大家能够更好地理解Python爬虫的基本流程,并掌握链家房源数据的爬取与处理技巧。

6 数据可视化

将爬取的二手房数据进行可视化的,如可以使用matplotlib绘制如下:

  • 价格与位置关系的散点图

  • 价格与位置关系的散点图

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV文件
df = pd.read_csv('ershoufang1.csv')

# 数据清洗,例如去除空值
df = df.dropna()

# 绘制价格直方图,展示二手房价格的分布情况
plt.figure(figsize=(10, 6))
plt.hist(df['price'], bins=20, color='blue', edgecolor='black')
plt.title('Distribution of Second-hand Housing Prices')
plt.xlabel('Price')
plt.ylabel('Frequency')
plt.show()


# 绘制价格与位置关系的散点图
# 这个图可能不太直观,因为位置是分类数据,这里仅作为示例
plt.figure(figsize=(10, 6))
plt.scatter(df['position'], df['price'], alpha=0.5)
plt.title('Price vs Location for Second-hand Housing')
plt.xlabel('Location')
plt.ylabel('Price')
plt.show()

价格与位置关系的散点图:

价格与位置关系的散点图:

注意:由于位置是分类数据,直接在散点图上表示可能不太直观,可能需要更复杂的可视化方法,如地理热图等。

文章持续跟新,可以微信搜一搜公众号  rain雨雨编程 ],第一时间阅读,涉及数据分析,机器学习,Java编程,爬虫,实战项目等。

### 使用 CMake 编译包含多个 C 源文件的工程 为了使用 CMake 来编译包含多个 C 源文件的工程项目,可以通过以下方式实现: #### 配置 `CMakeLists.txt` 文件 在项目的根目录下创建一个名为 `CMakeLists.txt` 的文件,并按照如下结构编写内容。 1. **指定最低版本需求** 设置所需的最小 CMake 版本号以确保兼容性。 ```cmake cmake_minimum_required(VERSION 3.20) ``` 2. **定义项目名称** 定义当前项目的名称以便于管理。 ```cmake project(MyProject LANGUAGES C) ``` 3. **设置源文件路径** 如果有多个子目录中的 `.c` 文件需要被加入到编译过程中,则可以利用 `aux_source_directory()` 函数自动获取这些文件列表。 ```cmake aux_source_directory(src SRC_FILES) # 获取 src 目录下的所有源文件并存储至变量 SRC_FILES 中[^5] ``` 4. **设置头文件路径** 若存在额外的头文件目录(如 `include`),则需通过 `include_directories()` 明确告知编译器其位置。 ```cmake include_directories(include) # 添加 include 路径作为头文件查找范围[^3] ``` 5. **设定目标输出路径** 可以为最终生成的目标二进制文件或者静态/动态库制定特定存放地点,比如将可执行程序存放到 `bin` 下面,把库保存到 `lib` 文件夹里。 ```cmake set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) # 设定可执行文件输出路径为 ./build/bin set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) # 设定库文件输出路径为 ./build/lib[^2] ``` 6. **添加可执行目标** 将之前收集起来的所有源代码组合成一个新的应用程序实体。 ```cmake add_executable(myapp ${SRC_FILES}) ``` 7. **清理中间产物** 默认情况下,运行 `cmake` 后会在同一级目录留下许多临时数据文件诸如 `CMakeCache.txt`, `CMakeFiles/`, 和其他构建脚本等杂项资料。为了避免混乱,建议切换到专门的工作区来完成整个流程操作。 完整的例子可能看起来像这样: ```cmake cmake_minimum_required(VERSION 3.20) project(MultiSourceExample LANGUAGES C) # 自动检测 'src' 子目录内的所有 .c 文件 aux_source_directory(src SOURCES) # 加入自定义头文件搜索路径 include_directories(include) # 修改默认输出目录 set(EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/bin") set(LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib") add_executable(multisourceexample ${SOURCES}) message(STATUS "Executable will be placed under: ${EXECUTABLE_OUTPUT_PATH}") ``` 上述方法不仅简化了手动罗列众多独立单元的过程,而且提高了维护效率,尤其适合规模较大的软件体系架构设计场景。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值