文章持续跟新,可以微信搜一搜公众号 [ rain雨雨编程 ],第一时间阅读,涉及数据分析,机器学习,Java编程,爬虫,实战项目等。
目录
前言
1. 爬取目标
2. 所涉及知识点
3. 步骤分析(穿插代码讲解)
步骤一:发送请求
步骤二:获取数据
步骤三:解析数据
步骤四:保存数据
4. 爬取结果
5. 完整代码
6 数据可视化
今天我将为大家分享一个非常实用的Python项目——链家房源数据的爬取与分析可视化。在这篇文章中,我们将分为六个部分来详细讲解,包括:爬取目标、所涉及知识点、步骤分析(穿插代码讲解)、爬取结果和完整代码,以及可视化处理数据。
本项目的目标是从链家网站上爬取二手房源的数据,并将其存储为CSV文件,然后进行后续的数据分析与可视化。我们将主要关注以下几项信息:
房源标题
房源价格
房源位置
示例网址为:链家二手房,我们将从这个网页爬取信息。
在进行爬虫项目时,我们需要掌握一些基本的知识和工具,以下是本项目中涉及的几个主要知识点:
网络爬虫:了解如何向目标网页发送请求并获取数据。
多页数据采集:如何获取网页上的多个页面的数据。
CSV文件:将爬取的数据保存为CSV文件,以便于后续分析。
数据可视化:对爬取到的数据进行可视化展示,利用pyecharts
等工具。
我们将使用以下几个主要的Python库:
requests
: 用于发送HTTP请求。
lxml
: 用于解析HTML内容。
pandas
: 用于数据处理与分析。
csv
: 内置模块,处理CSV文件的读写。
首先,我们需要向目标网页发送一个请求,以获取网页的源代码。我们将在代码中伪装浏览器,以避免被网站屏蔽。
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文件中。
通过以上代码的执行,我们将成功爬取到链家二手房源的数据,并保存到名为ershoufang1.csv
的文件中。该文件将包含所有房源的标题、价格和位置等信息,便于后续进行数据分析和可视化。
下面是完整的代码,方便大家直接参考和使用。
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爬虫的基本流程,并掌握链家房源数据的爬取与处理技巧。
将爬取的二手房数据进行可视化的,如可以使用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编程,爬虫,实战项目等。