0


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

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

前言

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

1. 爬取目标

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

  • 房源标题
  • 房源价格
  • 房源位置

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

2. 所涉及知识点

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

  • 网络爬虫:了解如何向目标网页发送请求并获取数据。
  • 多页数据采集:如何获取网页上的多个页面的数据。
  • CSV文件:将爬取的数据保存为CSV文件,以便于后续分析。
  • 数据可视化:对爬取到的数据进行可视化展示,利用pyecharts等工具。

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

  • requests: 用于发送HTTP请求。
  • lxml: 用于解析HTML内容。
  • pandas: 用于数据处理与分析。
  • csv: 内置模块,处理CSV文件的读写。

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

步骤一:发送请求

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

  1. import requests
  2. url = 'https://cs.lianjia.com/ershoufang/pg2/'
  3. headers = {
  4. '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'
  5. }
  6. response = requests.get(url=url, headers=headers)
  7. print(response) # 输出响应状态码

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

步骤二:获取数据

我们可以通过

  1. response.text

获取网页的HTML源代码。

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

步骤三:解析数据

使用

  1. lxml

库中的

  1. etree

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

  1. from lxml import etree
  2. et = etree.HTML(html_content)
  3. # 使用XPath提取所有房源信息
  4. doc = et.xpath('//*[@id="content"]/div[1]/ul/li')
  5. list_1 = []
  6. for li in doc:
  7. title = li.xpath('.//div[@class="title"]/a/text()')[0]
  8. price = li.xpath('.//div[@class="totalPrice totalPrice2"]/span/text()')[0]
  9. position = li.xpath('.//div[@class="positionInfo"]/a/text()')
  10. if position:
  11. position = '-'.join(position)
  12. list_1.append([title, price, position])

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

步骤四:保存数据

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

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

使用

  1. csv

模块中的

  1. writer

将每条房源信息写入CSV文件中。

4. 爬取结果

通过以上代码的执行,我们将成功爬取到链家二手房源的数据,并保存到名为

  1. ershoufang1.csv

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

5. 完整代码

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

  1. import requests
  2. from lxml import etree
  3. import csv
  4. # 发送请求
  5. url = 'https://cs.lianjia.com/ershoufang/pg2/'
  6. headers = {
  7. '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'
  8. }
  9. response = requests.get(url=url, headers=headers)
  10. # 获取数据
  11. html_content = response.text
  12. et = etree.HTML(html_content)
  13. doc = et.xpath('//*[@id="content"]/div[1]/ul/li')
  14. # 解析数据
  15. list_1 = []
  16. for li in doc:
  17. title = li.xpath('.//div[@class="title"]/a/text()')[0]
  18. price = li.xpath('.//div[@class="totalPrice totalPrice2"]/span/text()')[0]
  19. position = li.xpath('.//div[@class="positionInfo"]/a/text()')
  20. if position:
  21. position = '-'.join(position)
  22. list_1.append([title, price, position])
  23. # 保存数据
  24. # 定义列名
  25. headers = ['title', 'price', 'position']
  26. for p in list_1:
  27. with open('ershoufang1.csv', mode='a', encoding='utf-8', newline='') as file:
  28. csv_writer = csv.writer(file)
  29. csv_writer.writerow(headers) # 写入列名
  30. csv_writer.writerow(p)

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

6 数据可视化

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

  • 价格与位置关系的散点图
  • 价格与位置关系的散点图
  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. # 读取CSV文件
  4. df = pd.read_csv('ershoufang1.csv')
  5. # 数据清洗,例如去除空值
  6. df = df.dropna()
  7. # 绘制价格直方图,展示二手房价格的分布情况
  8. plt.figure(figsize=(10, 6))
  9. plt.hist(df['price'], bins=20, color='blue', edgecolor='black')
  10. plt.title('Distribution of Second-hand Housing Prices')
  11. plt.xlabel('Price')
  12. plt.ylabel('Frequency')
  13. plt.show()
  14. # 绘制价格与位置关系的散点图
  15. # 这个图可能不太直观,因为位置是分类数据,这里仅作为示例
  16. plt.figure(figsize=(10, 6))
  17. plt.scatter(df['position'], df['price'], alpha=0.5)
  18. plt.title('Price vs Location for Second-hand Housing')
  19. plt.xlabel('Location')
  20. plt.ylabel('Price')
  21. plt.show()

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

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

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

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


本文转载自: https://blog.csdn.net/qq_51749909/article/details/143109208
版权归原作者 rain雨雨编程 所有, 如有侵权,请联系我们删除。

“爬虫实战--- (6)链家房源数据爬取与分析可视化”的评论:

还没有评论