使用Python抓取房源信息

news2024/10/23 11:06:25

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.coloradmin.cn/o/2221529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行客户贷款行为数据挖掘与分析

#1024程序员节 | 征文# 在新时代下,消费者的需求结构、内容与方式发生巨大改变,企业要想获取更多竞争优势,需要借助大数据技术持续创新。本文分析了传统商业银行面临的挑战,并基于knn、逻辑回归、人工神经网络三种算法&#xff0…

【在Linux世界中追寻伟大的One Piece】Socket编程UDP

目录 1 -> UDP网络编程 1.1 -> V1版本 -echo server 1.2 -> V2版本 -DictServer 1.3 -> V2版本 -DictServer(封装版) 1 -> UDP网络编程 1.1 -> V1版本 -echo server 简单的回显服务器和客户端代码。 备注:代码中会用到地址转换函数。 noc…

Java面试题库——多线程

1.并行和并发有什么区别? 并行:是指两个或多个事件在同一时刻发生,是在不同实体上的多个事件; 并发:是指两个或多个事件在同一时间间隔发生,是同一实体上的多个事件。2.线程和进程的区别? 根本…

数据结构修炼——常见的排序算法:插入/希尔/选择/堆排/冒泡/快排/归并/计数

目录 一、常见的排序算法二、常见排序算法的实现2.1 排序算法回顾2.1.1 冒泡排序2.1.2 堆排序 2.2 直接插入排序2.3 希尔排序2.4 选择排序2.5 快速排序2.5.1 快速排序(霍尔法)2.5.2 快速排序(挖坑法)2.5.3 快速排序(前…

极客wordpress模板

这是一个展示WordPress主题的网页设计。页面顶部有一个导航栏,包含多个选项,如“关于我们”、“产品中心”、“案例展示”、“新闻动态”、“联系我们”和“技术支持”。页面中间部分展示了多个产品,每个产品都有一个图片和简短的描述。页面下…

【Linux】冯诺依曼体系结构 OS的概念

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 前言废话&#xff1a…

动态链接过程分析

目录 一、前言二、示例程序三、动态库的加载过程1、动态链接器加载动态库2、动态库的加载地址 四、符号重定位1、全局符号表2、全局偏移表 GOT3、liba.so 动态库文件的布局4、liba.so 动态库的虚拟地址5、GOT 表的内部结构6、反汇编 liba.so 代码 五、补充1、延迟绑定 plt 上文…

【ARM】ARM架构参考手册_Part B 内存和系统架构(5)

目录 5.1关于缓存和写缓冲区 5.2 Cache 组织 5.2.1 集联性(Set-associativity) 5.2.2 缓存大小 5.3 缓存类型 5.3.1 统一缓存或分离缓存 5.3.2 写通过(Write-through)或写回(Write-back)缓存 5.3.3…

基于R语言机器学习遥感数据处理与模型空间预测技术及实际项目案例分析

随机森林作为一种集成学习方法,在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性,随机森林在降低模型方差和过拟合风险方面具有显著优势。在训练过程中,使用Bootstrap抽样生成不同的训练集&#xff…

Linux环境配置(学生适用)

1.挑选最便宜的云服务器 如腾讯云服务器,华为云服务器,百度云服务器等等…… 2.找到你的云服务器实例,然后找到你的公网IP。 3.云服务器实例 ---更多 --- 重置root密码 (一定要重置) 4. 下载并安装 xshell 或者其他登陆软件 xshel…

12. 命令行

Hyperf 的命令行默认由 hyperf/command 组件提供,而该组件本身也是基于 symfony/console 的抽象。 一、安装 通常来说该组件会默认存在,但如果您希望用于非 Hyperf 项目,也可通过下面的命令依赖 hyperf/command 组件。 composer require hype…

告别ELK,APO提供基于ClickHouse开箱即用的高效日志方案——APO 0.6.0发布

ELK一直是日志领域的主流产品,但是ElasticSearch的成本很高,查询效果随着数据量的增加越来越慢。业界已经有很多公司,比如滴滴、B站、Uber、Cloudflare都已经使用ClickHose作为ElasticSearch的替代品,都取得了不错的效果&#xff…

【Golang】Go语言中如何创建Cron定时任务

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

MySQL【知识改变命运】11

联合查询 6. ⼦查询6.1 语法6.2 单⾏⼦查询6.3 多⾏⼦查询6.4 多列⼦查询6.5 在from⼦句中使⽤⼦查询 7. 合并查询7.1 创建新表并初始化数据7.2 Union7.3 Union all 8. 插⼊查询结果8.1 语法8.2 ⽰例 6. ⼦查询 ⼦查询是把⼀个SELECT语句的结果当做别⼀个SELECT语句的条件&…

10.22 MySQL

存储过程 存储函数 存储函数是有返回值的存储过程,存储函数的参数只能是in类型的。具体语法如下: characteristic 特性 练习: 从1到n的累加 ​​​​​​ create function fun1(n int) returns int deterministic begindeclare total i…

制氮机分子筛的作用

制氮机作为一种重要的工业设备,广泛应用于食品、饮料、化学、石油、电子和医疗保健等多个行业。其核心组件之一——分子筛。本文将详细探讨制氮机分子筛的作用及其重要性。 一、分子筛的基本概念 分子筛是一种具有均匀孔径的多孔材料,常用于气体分离和纯…

Elasticsearch 中的高效按位匹配

作者:来自 Elastic Alexander Marquardt 探索在 Elasticsearch 中编码和匹配二进制数据的六种方法,包括术语编码(我喜欢的方法)、布尔编码、稀疏位位置编码、具有精确匹配的整数编码、具有脚本按位匹配的整数编码以及使用 ESQL 进…

基于vue框架的的二手车交易系统的设计与实现thx7v(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,卖家,车辆类型,二手车,在线留言,订单信息 开题报告内容 基于Vue框架的二手车交易系统的设计与实现开题报告 一、课题背景及意义 随着汽车消费市场的日益成熟与消费者换车频率的增加,二手车交易市场逐渐成为汽车市场的…

pycharm配置git版本控制

今天记录一下如何在pycharm工具中配置git版本控制,主要分以下步骤: 1、安装git 首先需要有git环境,去git官网下载git安装包,下一步下一步执行安装完成即可 2、在pycharm中配置git路径 下载git后,在pycharm的 setti…

「AIGC」n8n AI Agent开源的工作流自动化工具

n8n AI Agent 是一个利用大型语言模型(LLMs)来设计和构建智能体(agents)的工具,这些智能体能够执行一系列复杂的任务,如理解指令、模仿类人推理,以及从用户命令中理解隐含意图。n8n AI Agent 的核心在于构建一系列提示(prompts),使 LLM 能够模拟自主行为。 传送门→ …