Python 语言 用 Requests+XPath 爬取链家二手房数据 户型 / 面积 / 成交价

Python阿木 发布于 3 天前 5 次阅读


阿木博主一句话概括:基于Requests和XPath的Python链家二手房数据爬取实践

阿木博主为你简单介绍:
本文将介绍如何使用Python语言结合Requests库和XPath技术,实现对链家二手房数据的爬取。我们将重点关注户型、面积和成交价这三个字段,并详细阐述整个爬取过程,包括数据解析、异常处理以及数据存储等环节。

一、
链家作为中国领先的房地产服务平台,提供了大量的二手房信息。这些信息对于房地产市场的分析、投资决策等具有重要意义。由于链家网站的数据量庞大,手动获取和分析这些数据既耗时又费力。本文将介绍如何利用Python语言和Requests库结合XPath技术,实现链家二手房数据的自动化爬取。

二、准备工作
1. 环境搭建
在开始爬取之前,我们需要搭建一个Python开发环境。以下是所需的基本步骤:
- 安装Python:从Python官方网站下载并安装Python。
- 安装pip:pip是Python的包管理工具,用于安装和管理Python包。
- 安装Requests库:使用pip安装Requests库,命令如下:

pip install requests

2. 熟悉XPath
XPath是一种在XML和HTML文档中查找信息的语言。在爬取过程中,我们需要使用XPath来定位所需的数据。以下是一些常用的XPath表达式:
- `/`: 表示根节点。
- `//`: 表示从根节点开始,匹配所有符合条件的节点。
- `.`: 表示当前节点。
- `@`: 表示属性。

三、爬取流程
1. 发送请求
使用Requests库发送HTTP请求,获取链家二手房列表页面的HTML内容。

python
import requests

url = 'https://www.lianjia.com/beijing/pg{}/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

def get_html(url):
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.text
except requests.HTTPError as e:
print(e)
return None

html = get_html(url.format(1))

2. 解析HTML
使用XPath定位所需的数据,并提取户型、面积和成交价等信息。

python
from lxml import etree

def parse_html(html):
tree = etree.HTML(html)
house_list = tree.xpath('//div[@class="content__list__item"]')
for house in house_list:
house_type = house.xpath('.//div[@class="content__list__item__title"]/a/text()')[0]
area = house.xpath('.//div[@class="content__list__item__info"]/text()')[0]
price = house.xpath('.//div[@class="content__list__item__info"]/text()')[1]
print(house_type, area, price)

parse_html(html)

3. 异常处理
在爬取过程中,可能会遇到各种异常情况,如网络请求失败、数据解析错误等。为了确保程序的稳定性,我们需要对异常进行处理。

python
def safe_get_text(element, path):
try:
return element.xpath(path)[0].text
except IndexError:
return None

def parse_html(html):
tree = etree.HTML(html)
house_list = tree.xpath('//div[@class="content__list__item"]')
for house in house_list:
house_type = safe_get_text(house, './/div[@class="content__list__item__title"]/a/text()')
area = safe_get_text(house, './/div[@class="content__list__item__info"]/text()')[0]
price = safe_get_text(house, './/div[@class="content__list__item__info"]/text()')[1]
print(house_type, area, price)

4. 数据存储
将爬取到的数据存储到文件或数据库中,以便后续分析和处理。

python
import csv

def save_to_csv(house_list, filename='house_data.csv'):
with open(filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['户型', '面积', '成交价'])
for house in house_list:
writer.writerow([house['house_type'], house['area'], house['price']])

house_list = []
for i in range(1, 10):
html = get_html(url.format(i))
if html:
parse_html(html)
house_list.extend(parse_html(html))

save_to_csv(house_list)

四、总结
本文介绍了如何使用Python语言结合Requests库和XPath技术,实现对链家二手房数据的爬取。通过发送HTTP请求、解析HTML、异常处理和数据存储等步骤,我们可以快速获取所需的数据。在实际应用中,可以根据需求调整爬取策略,提高爬取效率和准确性。

五、展望
随着爬虫技术的不断发展,未来我们可以结合更多高级技术,如机器学习、深度学习等,对爬取到的数据进行更深入的分析和处理。我们还需要关注法律法规和道德伦理,确保爬虫的合法性和正当性。