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

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

爬虫实战--- (6)链家房源数据爬取与分析可视化_第1张图片

目录

前言

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的文件中。该文件将包含所有房源的标题、价格和位置等信息,便于后续进行数据分析和可视化。

爬虫实战--- (6)链家房源数据爬取与分析可视化_第2张图片

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()

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

爬虫实战--- (6)链家房源数据爬取与分析可视化_第3张图片

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

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

爬虫实战--- (6)链家房源数据爬取与分析可视化_第4张图片

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

爬虫实战--- (6)链家房源数据爬取与分析可视化_第5张图片

你可能感兴趣的:(爬虫实战系列,python,爬虫,数据分析)