使用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文件。
确保遵守目标网站的服务条款,在合法合规的前提下使用爬虫技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/897421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT日志库:log4Qt及Qt自带日志库使用

介绍 Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C 端口。它旨在供开源和商业Qt项目使用。所以 Log4Qt 是Apache Log4J 的Qt移植版,所以看Log4J的资料应该是最直接有效的(因为 Log4Qt的直接资料太少了)。 Log4Qt主要是用来记录日志(…

DCS项目调试踩坑记录

最近在调试一个DCS项目(集散控制系统),实际上就是一个新建厂区的控制系统。PLC用的是西门子1500,控制画面使用组态王7.5。 在调试过程中,发现给西门子DB块的变量转移到组态王太难了,因此记录一下&#xff0…

【IEEE独立出版 | 厦门大学主办】第四届人工智能、机器人和通信国际会议(ICAIRC 2024)

第四届人工智能、机器人和通信国际会议(ICAIRC 2024)定于2024年12月27-29日在中国厦门举行。会议旨在为从事“人工智能、机器人和通信”研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术,了解学术发展趋势&#xf…

TCRT5000红外循迹传感器指南

开始先发送红外线 当返回的红外线的信号量小于规定值时,D0输出0,反之输出1 黑色的物体吸收红外光比其他物体多,所以检测到黑色物体D0会输出0,可以以此来循迹 逆时针调节电位器可以使得规定值上升,需要接受更多信号才能输出1 顺…

【前端】如何制作一个自己的网页(15)

有关后代选择器的具体解释&#xff1a; 后代选择器 后代选择器使用时&#xff0c;需要以空格将多个选择器间隔开。 比如&#xff0c;这里p span&#xff0c;表示只设置p元素内&#xff0c;span元素的样式。 <style> /* 使用后代选择器设置样式 */ p span { …

大数据-184 Elasticsearch - 原理剖析 - DocValues 机制原理 压缩与禁用

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

数字后端零基础入门系列 | Innovus零基础LAB学习Day4

Module 10 利用Global Router来分析设计是否可绕通 LAB10-1 跑一个placement 本章节目的是load进一个floorplan&#xff0c;跑通一个placement并完成post-placement的timing优化 导入设计和floorplan 这步之前的lab已经做过了&#xff0c;大家再按照下面的步骤再练习巩固下…

信息安全工程师(62)网络蠕虫分析与防护

网络蠕虫分析 网络蠕虫是一种智能化、自动化&#xff0c;综合了网络攻击、密码学和计算机病毒技术的恶意程序或代码&#xff0c;它无须计算机使用者干预即可运行。这种蠕虫能够扫描和攻击网络上存在系统漏洞的节点主机&#xff0c;并通过局域网或国际互联网从一个节点传播到另一…

【UE5】通过程序化网格体组件实现剖切功能

效果 步骤 1. 新建两个Actor类蓝图&#xff0c;分别命名为“BP_CutActor”、“BP_CutPlane”&#xff0c;分别表示被剖切的网格体和剖切的片面。 2. 打开“BP_CutActor”&#xff08;被剖切的网格体&#xff09;&#xff0c;添加静态网格体组件、程序化网格体组件&#xff0c;…

(三)第一个Qt程序“Qt版本的HelloWorld”

一、随记 我们在学习编程语言的时候&#xff0c;各种讲解编程语言的书籍中通常都会以一个非常经典的“HelloWorld”程序展开详细讲解。程序虽然简短&#xff0c;但是“麻雀虽小&#xff0c;五脏俱全”&#xff0c;但是却非常适合用来熟悉程序结构、规范&#xff0c;快速形成对编…

原型模式和建造模式的区别

原型模式&#xff08;Prototype Pattern&#xff09;和建造者模式&#xff08;Builder Pattern&#xff09;虽然都是创建型设计模式&#xff0c;但它们的应用场景和实现方式有着显著的区别。以下是二者的详细对比&#xff1a; 1. 意图和应用场景 原型模式&#xff1a; 意图&a…

【论文阅读】2022 TChecker Precise Static Inter-Procedural Analysis for Detecting

总览 “TChecker: Precise Static Inter - Procedural Analysis for Detecting Taint - Style Vulnerabilities in PHP Applications” 由香港中文大学的 Changhua Luo、Penghui Li 和 Wei Meng 撰写。论文介绍了 TChecker 工具&#xff0c;用于检测 PHP 应用中的污点式漏洞&am…

【Linux】为什么环境变量具有全局性?共享?写时拷贝优化?

环境变量表具有全局性的原因&#xff1a; 环境变量表之所以具有全局性的特征&#xff0c;主要是因为它们是在进程上下文中维护的&#xff0c;并且在大多数操作系统中&#xff0c;当一个进程创建另一个进程&#xff08;即父进程创建子进程&#xff09;时&#xff0c;子进程会继承…

动态路由:RIP实验

1.划分IP 2.配置环回 3.接口配置IP地址 4.进入RIP中&#xff0c;关闭手工汇总&#xff0c;选择版本号&#xff0c;宣告 5.ping命令查看是否全网通 6.在R3上配置缺省路由 [R3-rip-1]default-route originate 在边界路由器上下发缺省 7.为了安全配置手工认证 [R1-Gigab…

qt QVariant详解

QVariant是Qt框架中一个功能强大的变体类&#xff0c;它提供了一种通用的方式来存储Qt对象及其他类的值&#xff0c;能够以类似于指针的方式存储任意类型的值。 一、 主要特性 通用性&#xff1a;QVariant可以存储几乎所有数据类型&#xff0c;包括基本数据类型&#xff08;如…

刷题小记9:回溯

回溯算法模板&#xff1a; void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;) {处理节点;backtracking(路径&#xff0c;选择列表); // 递归回溯&#xff0c;撤销处理…

html+vue实现动态复杂table

1、效果 2、代码 <div style"overflow: scroll; width: 100%;height: calc(100% - 80px);"><table class"table table-bordered" style"width: auto;table-layout: fixed;"><thead style"position: sticky;top: -1px;z-inde…

【C++干货篇】——类和对象的魅力(四)

【C干货篇】——类和对象的魅力&#xff08;四&#xff09; 1.取地址运算符的重载 1.1const 成员函数 将const修饰的成员函数称之为const成员函数&#xff0c;const修饰成员函数放到成员函数参数列表的后面。const实际修饰该成员函数隐含的this指针&#xff08;this指向的对…

IDEA如何查看所有的断点(Breakpoints)并关闭

前言 我们在使用IDEA开发Java应用时&#xff0c;基本上都需要进行打断点的操作&#xff0c;这方便我们排查BUG&#xff0c;也方便我们查看设计的是否正确。 不过有时候&#xff0c;我们不希望进入断点&#xff0c;这时候除了点击断点关闭外&#xff0c;有没有更快速的方便关闭…

深入浅出剖析重量级文生图模型Flux.1

24年8月&#xff0c;Flux.1的发布又一次火爆整个AI绘图领域&#xff0c; 号称AI文生图的“新标杆”&#xff0c;刷新AI图像领域的新格局。 Flux是一款由Black Forest Labs开发的尖端AI图像生成工具&#xff0c;旨在通过先进的技术将文本提示转化为高质量的图像。Flux AI支持多…