Python贝壳网二手小区数据爬取(2025年3月更)

打印 上一主题 下一主题

主题 638|帖子 638|积分 1914


上次写了用python爬取安居客二手小区数据,这次应粉丝要求写一篇爬取贝壳网二手小区数据的教程,由于贝壳网的反爬策略比安居客的更为复杂,所以这次就大胆一试!!!
这次教程内容大部分都是由Ai帮我写的,所以大概不太详细!! 欢迎私信大概评论区提问~~
先来看看网页,在这里找到小区,并选择具体的市县地域:

然后我们F12打开网络看看数据在那里


我们在这个文档里面找到了对应的小区数据,言外之意只需要请求这个url即可得到想要的数据啦~
同时,在这些信息里面还有一个小区详情页的链接,里面有诸如小区的容积率、绿化率、开辟商等等信息,我们一起给它爬下来


大体思绪就是:

  • 先用一些用户信息如浏览器类型、cookie等信息来包装爬虫
  • 请求一遍小区列表的url来获取小区总数
  • 通过小区总数来计算需要请求的页数,使用for循环来遍历每一页的小区
  • 提取每页小区的数据,得到每个小区的详情页链接后继续发送请求来进入详情页
  • 提取小区详情页数据
  • 将所有结果生存为一个excel表格

废话不多说,直接上干货~
一、代码团体架构剖析

  1. # 导入必要库(相当于工具箱)
  2. import requests  # 网络请求工具
  3. import time      # 时间控制工具
  4. import random    # 随机数生成器
  5. import pandas as pd  # 数据表格工具
  6. from bs4 import BeautifulSoup  # HTML解析器
  7. import math      # 数学计算工具
  8. from concurrent.futures import ThreadPoolExecutor, as_completed  # 多线程工具
复制代码
下面是团体的函数流程以及每个函数大体的作用~
序号函数名称功能形貌输入参数返回值1init_session(config)初始化网络会话对象config: 用户配置字典requests.Session对象2get_params(session)生成动态请求参数session: 会话对象请求参数字典3fetch_list_page()抓取列表页数据session, page_url剖析后的数据列表4parse_list_page(html)剖析列表页HTML内容html: 页面源代码字符串小区信息列表5fetch_detail_batch()批量抓取详情页数据session, urls详情数据字典6parse_detail_page()剖析详情页完整信息session, url详细字段字典7crawl_full_data()主控流程(分页抓取数据)session归并后的完整数据列表 二、各部分代码详解

1. main()主函数剖析

要修改的地方主要有四个,其余的不需要特殊的改动!!!!

  • 城市(city)
  • 市县(region)
  • Cookies
  • excel表格输出的路径
  1. # 主程序入口(程序起点)
  2. if __name__ == "__main__":
  3.     # ================== 用户配置区域 ==================
  4.     CONFIG = {
  5.         "city": "fs",       # 目标城市拼音(如: 佛山->fs,上海->sh)
  6.         "region": "nanhai", # 目标区域拼音(如: 南海区->nanhai)
  7.         "cookies": {        # 必需Cookie
  8.             'lianjia_uuid': '自修修改',
  9.             'lianjia_token': '自行修改',
  10.             'security_ticket': '自行修改'
  11.         },
  12.         "srcid": "自行修改"
  13.     }
  14.     #输出的excel路径
  15.     output_name = f'{CONFIG["city"]}_{CONFIG["region"]}_小区数据.xlsx'
  16.     # ================================================
  17.     # 初始化会话
  18.     session = init_session(CONFIG)
  19.    
  20.     # 执行爬取
  21.     start_time = time.time()
  22.     final_data = crawl_full_data(session)
  23.    
  24.     # 保存结果
  25.     if final_data:
  26.         df = pd.DataFrame(final_data)[[
  27.             '小区名称', '参考均价', '成交信息', '出租信息', '行政区', '商圈', '建筑年代',
  28.             '详情页均价', '建筑类型', '房屋总数', '楼栋总数', '绿化率', '容积率',
  29.             '交易权属', '建成年代', '供暖类型', '用水类型', '用电类型',
  30.             '物业费', '附近门店', '物业公司', '开发商', '详情页链接'
  31.         ]]
  32.         df.to_excel(output_name, index=False)
  33.         print(f"数据已保存至: {output_name}")
  34.         print(f"总计 {len(df)} 条数据,耗时 {(time.time()-start_time)/60:.1f} 分钟")
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表