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

Python抓取广东省各城市租房数据并存储

广东省各城市租房数据爬取项目详解

项目背景与目标

在当今房价高企的时代,租房成为了许多人尤其是年轻人的首选居住方式。对于租房者来说,如何快速获取准确、全面的租房信息是一个重要需求。同时,对于数据分析爱好者和房地产研究人员来说,大量的租房数据也是进行市场分析的宝贵资源。

基于此,我开发了一个广东省各城市租房数据爬取项目,旨在从主流房产网站获取最新的租房信息,并将其存储到CSV文件和MySQL数据库中,为后续的数据分析和推荐系统提供基础数据支持。

技术栈选择

在项目开发中,我选择了以下技术栈:

  • Python:作为主要开发语言,其丰富的库生态非常适合爬虫开发
  • Requests:用于发送HTTP请求,获取网页内容
  • lxml:用于解析HTML,提取所需数据
  • CSV:作为中间存储格式,方便数据的临时保存和查看
  • Django:作为Web框架,用于后续的数据管理和网站展示(但针对这个爬虫代码可以去掉)

爬虫实现详解

1. 核心爬虫逻辑

爬虫的核心逻辑位于Main.py文件中,主要实现了以下功能:

importrequestsfromlxmlimportetreeimportcsvimporttime headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36','cookie':'...'# 此处为浏览器cookie}each_page_number=0all_page_number=0foriinrange(1,51):url=f'https://zh.lianjia.com/zufang/pg{i}/#contentList'res=requests.get(url,headers=headers)html=etree.HTML(res.text)all_div=html.xpath('//div[@class="content__list"]/div')# 后续数据提取逻辑...

2. 数据提取与处理

爬虫从链家网站的租房列表页面提取以下信息:

  • 标题:房源的标题信息
  • 类型:房源类型(如住宅、公寓等)
  • 布局:房屋布局(如几室几厅)
  • 朝向:房屋朝向
  • 城市:默认为珠海市
  • 行政区:所属行政区
  • 街道:所属街道
  • 面积:房屋面积
  • 价格:租金价格
  • 标签:房源特色标签
  • 详情:房源详情链接
  • 图片链接:房源图片链接

关键数据提取代码如下:

fordivinall_div:title=div.xpath('.//a[@class="twoline"]/text()')ifnottitle:continueelse:try:mes=div.xpath('.//a[@class="twoline"]/text()')[0].strip().split()title=mes[0].split('·')[-1]style=mes[0].split('·')[0]building=mes[1]direction=mes[2]city='珠海市'position=div.xpath('.//p[@class="content__list--item--des"]/a/text()')division=position[0]street=position[1]area=div.xpath('.//p[@class="content__list--item--des"]/text()')[4].strip()price=div.xpath('.//span[@class="content__list--item-price"]/em/text()')[0]tags=div.xpath('.//p[@class="content__list--item--bottom oneline"]/i/text()')detail=div.xpath('.//a[@class="content__list--item--aside"]/@href')[0]detail='https://hz.lianjia.com/'+detail pic=div.xpath('.//a[@class="content__list--item--aside"]/img/@data-src')[0]# 数据写入逻辑...exceptExceptionase:print(f'{e}')

3. 数据存储

爬虫将提取的数据存储到CSV文件中,方便后续处理:

withopen('guangdong_house.csv','a+',encoding='utf-8-sig',newline='')asfile:writer=csv.writer(file)# 写入数据writer.writerow([title,style,building,direction,city,division,street,area,price,tags,detail,pic])

4. 反爬措施

为了避免被网站反爬机制检测,爬虫采取了以下措施:

  • 设置了合理的User-Agent头
  • 携带了浏览器cookie
  • 每爬取一页后休眠2秒
  • 异常捕获机制,确保爬虫不会因为个别页面的异常而中断

数据导入数据库

为了方便后续的数据分析和管理,项目使用import_csv_to_db.py脚本将CSV文件中的数据导入到Django数据库中:

1. 数据预处理

在导入数据库之前,脚本对数据进行了预处理:

defparse_area(area_text):ifnotarea_text:return0.0,area_textmatch=re.search(r'(\d+\.?\d*)',area_text)ifmatch:area_value=float(match.group(1))returnarea_value,area_textreturn0.0,area_text

2. 数据库模型映射

脚本将CSV数据映射到Django的Rental模型中:

rental=Rental(title=row.get('标题',''),type=row.get('类型',''),layout=row.get('布局',''),orientation=row.get('朝向',''),city=row.get('城市',''),district=row.get('行政区',''),street=row.get('街道',''),area_text=area_text,area=area_value,price_text=price_text,price=price_value,tags=row.get('标签',''),detail=row.get('详情',''),imgs=row.get('图片链接',''),oid=oid)rental.save()

3. 导入统计

脚本还实现了导入统计功能,记录成功导入和失败的记录数:

print(f"\n导入完成!")print(f"成功导入:{success_count}条")print(f"失败:{error_count}条")

项目运行流程

  1. 运行爬虫:执行Main.py脚本,爬取链家网站的租房数据
  2. 生成CSV文件:爬虫将数据保存到guangdong_house.csv文件中
  3. 导入数据库:执行import_csv_to_db.py脚本,将CSV数据导入到Django数据库
  4. 数据分析与应用:使用导入的数据进行后续的分析和应用

遇到的问题与解决方案

  1. 反爬机制:链家网站有一定的反爬机制,通过设置合理的请求头和休眠时间,成功避免了被封禁

  2. 数据格式不一致:不同房源的信息格式可能略有不同,通过异常捕获和数据清洗,确保了数据的一致性

  3. 数据量较大:爬取50页数据可能会产生大量记录,通过分批处理和数据库优化,确保了导入过程的稳定性

项目价值与应用场景

  1. 租房信息查询:为用户提供最新、全面的租房信息

  2. 市场分析:通过对大量租房数据的分析,了解广东省特别是珠海市的租房市场趋势

  3. 价格预测:基于历史数据,预测未来租房价格走势

  4. 推荐系统:根据用户需求,推荐合适的租房信息

  5. 学术研究:为房地产相关研究提供数据支持

总结

广东省租房数据爬取项目是一个结合了网络爬虫、数据处理和数据库技术的综合应用。通过该项目,我们不仅获取了大量有价值的租房数据,也为后续的数据分析和推荐系统奠定了基础。

在开发过程中,我们遇到了各种挑战,但通过合理的技术选型和代码设计,成功实现了项目目标。这个项目不仅展示了Python在数据采集和处理方面的强大能力,也体现了如何将原始数据转化为有价值的信息资源。

未来,我们可以考虑进一步优化爬虫效率,增加更多数据源,以及开发基于这些数据的可视化和推荐系统,为用户提供更加全面和智能的租房服务。

使用说明

运行Main.py时比如要爬取深圳市的数据,就需要把url = f’https://zh.lianjia.com/zufang/pg{i}/#contentList’中的zh改为sz即可,城市的首字母组合,同时把city = '深圳市’即刻,因为链家网是直接显示该城市的数据,位置信息只有行政区和街道相关数据,没有城市,我们需要爬取整个省份的各个城市后面做数据分析相关操作就要爬取哪个城市给这个字段手动标记一下存储进去!

附件图片



http://www.jsqmd.com/news/472837/

相关文章:

  • 【研报216】2026年智能驾驶产业市场趋势与用户需求分析:AI 重构汽车价值链
  • 基于springboot城市智慧养犬管理平台
  • 4-Kotlin核心语法-数据类与密封类
  • 为什么防御 DDoS 攻击的成本这么高?
  • 基于AWS CAF构建标准化云治理体系,助力企业实现安全合规与可持续优化
  • CTF保姆级教程:从零基础到参赛拿奖,2026年最全指南!
  • 花8000买的商标竟是“废标”?内行人教你3步避开90%的坑
  • Java字符串反转,统计字符串中字符类型及频次
  • 爬虫识别与防御
  • Flutter 三方库 icc_parser 的鸿蒙化适配指南 - 高效解析 ICC 颜色配置文件,精准还原跨平台色彩表现
  • 原儿茶醛市场洞察:2026 - 2032年复合增长率(CAGR)为4.6%
  • 三相电压型SVPWM整流器仿真与控制策略分析,双闭环PID控制,输出电压600V(可自行调节)...
  • 氛围编程的一些体会
  • 权威认证 + 实战教学 守嘉职业技能三大热门培训 为健康产业输送专业人才 - 品牌排行榜单
  • OpenClaw Runtime 源码级解析:从 CLI 到 Agent Execution Engine
  • P1908 逆序对
  • Oracle 故障应急处理手册-RAC 投票盘(Voting Disk)故障恢复
  • Flutter 三方库 rabbit_converter 的鸿蒙化适配指南 - 让消息转换回归“工业化标准”,打造鸿蒙应用专家级的 RabbitMQ 数据适配中台
  • OpenClaw:打开文献综述宝库的钥匙——引用方法与技巧详解
  • SLAM公式中双竖线 ||·|| 表示什么意思?一文搞懂范数的含义
  • 甘肃2026上半年软考报名时间已出!
  • 院墙上的监控成摆设?避开这三个坑,不给骗子留机会!室外监控摄像头哪个品牌好
  • Boost源码分析: Serialization
  • 国产化解决方案!鼎讯信通 射频信号源模块 DXSL系列
  • 哺乳动物为什么不长绿毛
  • next-dbm:审批可控、部署高效,解锁数据构建更新新范式
  • 广西选物业律师实践经验分享,效果看得见!
  • 计算机毕业设计springboot基于Java的校园问题反馈系统 基于Spring Boot框架的高校师生诉求处理与服务平台的设计与实现 基于Java Web的校园意见收集与问题跟踪管理系统开发与应用
  • 鱼眼相机标定矫正详细步骤
  • 参观幼儿园前要做哪些准备?