当前位置: 首页 > article >正文

使用Python抓取房源信息

1. 引言

在当今大数据时代,网络爬虫成为获取信息的重要手段之一。本文将以某家二手房为例,演示如何使用Python爬虫抓取房源信息,并将这些信息保存到Excel文件中。
目标网站
在这里插入图片描述

2. 准备工作

2.1 安装必要的库

在开始之前,请确保你的环境中已经安装了以下Python库:

  • requests:用于发送HTTP请求。
  • lxml:提供了一个强大的XPath选择器,方便解析HTML文档。
  • pandas:用来处理和分析数据。
  • fake_useragent:随机生成User-Agent,以模拟不同的浏览器访问。

可以通过pip命令安装它们:

pip install requests lxml pandas fake_useragent

2.2 代理池准备

为了防止IP被封禁,我们需要准备一个代理池。这里假设你已经有了一个名为proxies.txt的文件,其中每一行都存储了一个可用的代理服务器地址。

3. 代码详解

3.1 导入模块

首先需要导入所需的Python库:

import random
import pandas as pd
from lxml import etree
import requests
from fake_useragent import UserAgent

3.2 设置请求头

接下来设置请求头,特别是User-Agent字段,使用fake_useragent库随机生成:

headers = {
    'User-Agent': UserAgent().random
}

3.3 读取代理列表

在爬虫过程中,使用代理可以有效避免被网站封锁。我们从一个文件中读取代理服务器的列表,并将其存储到proxies列表中:

file_path = "E:/Python/代理池/proxies.txt"

# 从文件中读取代理列表
proxies = []
with open(file_path, 'r') as file:
    for line in file:
        proxy = line.strip()  # 去除每行末尾的换行符
        proxies.append(proxy)

这里需要注意的是,确保proxies.txt文件中的每一行都是有效的代理地址格式(例如:http://ip:port)。

3.4 抓取数据

3.4.1 创建会话对象

为了更好地管理HTTP请求和保持连接状态,我们可以创建一个requests.Session对象:

session = requests.session()
3.4.2 发送POST请求

针对链家二手房的不同页面,通过循环遍历页码来发送请求。每次请求时随机选择一个代理以减少被封禁的风险:

for page in range(1, 6):  # 抓取第1页到第5页
    url = f'https://bj.lianjia.com/ershoufang/pg{page}/'
    
    # 使用随机选择的代理发送POST请求
    response = session.post(url=url, proxies={'http': random.choice(proxies)}, headers=headers, timeout=10)

注意,这里使用了post方法,但通常对于这类网页浏览请求,使用get方法更为合适。这可能是一个示例代码的小错误,正确的做法应该是:

response = session.get(url, proxies={'http': random.choice(proxies)}, headers=headers, timeout=10)
3.4.3 解析HTML内容

一旦成功获取响应,接下来需要解析HTML文档,提取有用的信息。这里采用lxml库提供的XPath功能:

tree = etree.HTML(response.text)
items = tree.xpath('//*[@id="content"]/div[1]/ul/li')

上述代码定位到了包含房源信息的列表项。

3.4.4 提取信息

对每个房源项目进行解析,提取标题、位置信息、房屋详情以及总价等字段:

data = []
for item in items:
    title = item.xpath('./div[1]/div[1]/a/text()')[0]  # 房源标题
    positionInfo = item.xpath('./div[1]/div[2]/div/a[1]/text()')[0] + item.xpath('./div[1]/div[2]/div/a[2]/text()')[0]  # 位置信息
    houseInfo = item.xpath('./div[1]/div[3]/div/text()')[0]  # 房屋信息
    total_price = item.xpath('./div[1]/div[6]/div[1]/span/text()')[0] + item.xpath('./div[1]/div[6]/div[1]/i[2]/text()')[0]  # 总价
    data.append({
        '标题': title,
        '位置信息': positionInfo,
        '房屋信息': houseInfo,
        '总价': total_price
    })

将这些信息添加到当前页面的数据集合data中。

3.5 存储数据

当所有页面都处理完毕后,我们将收集到的所有数据合并成一个大的列表all_data,然后转换为Pandas DataFrame,并最终保存为Excel文件:

# 将当前页面的数据添加到总数据列表
all_data.extend(data)

# 将所有数据转换为 DataFrame
df = pd.DataFrame(all_data)

# 将 DataFrame 写入 Excel 文件
df.to_excel('链家二手房.xlsx', index=False)
print("数据已成功保存到 Excel 文件中")

4. 运行结果

控制台输出
在这里插入图片描述

保存文档
在这里插入图片描述

5. 结论

本文介绍了如何利用Python编写简单的网络爬虫程序来抓取链家网上的二手房信息,并且展示了如何使用Pandas库将这些信息保存为Excel文件。
确保遵守目标网站的服务条款,在合法合规的前提下使用爬虫技术。


http://www.kler.cn/news/361164.html

相关文章:

  • iOS 18.1 RC 版本发布,修复iPhone16随机重启、浏览视频卡顿等bug
  • 华为ICT题库-云计算部分
  • 判断一个数是不是素数(质数)(c语言)
  • el-table在某些条件下禁止选中
  • 【R + Python】iNaturalist 网站图片下载 inat api
  • Linux基础命令(入门)
  • 商汤科技十周年公布新战略,将无缝集成算力、模型及应用
  • HCIP-HarmonyOS Application Developer 习题(十四)
  • 【3D】几何算法合集2(自用资源)方便cv
  • web服务器基石详解------nginx与 HTTP介绍篇
  • 蓝桥杯嵌入式ADC+DMA数据采样
  • 基于Multisim的模拟拔河游戏比赛设计与仿真
  • 征服ES(ElasticSearch)的慢查询实战
  • 全面解析:集成AWS、云原生和监控的开源运维管理平台
  • 分享时刻,随便谈谈
  • kotlin实现viewpager
  • Jmeter 实战 JDBC配置
  • HTTP Content-Type的常见类型解析
  • 力扣每日打卡挑战 3184. 构成整天的下标对数目 I
  • QTextEdit 实现特定文本以不同颜色添加显示(C++/QT)