IT评测·应用市场-qidao123.com
标题:
Python贝壳网二手小区数据爬取(2025年3月更)
[打印本页]
作者:
李优秀
时间:
2025-3-11 15:20
标题:
Python贝壳网二手小区数据爬取(2025年3月更)
上次写了用
python爬取安居客二手小区数据
,这次应粉丝要求写一篇爬取
贝壳网二手小区数据
的教程,由于贝壳网的反爬策略比安居客的更为复杂,所以这次就大胆一试!!!
这次教程内容大部分都是由Ai帮我写的,所以大概不太详细!!
欢迎私信大概评论区提问~~
先来看看网页,在这里找到小区,并选择具体的市县地域:
然后我们F12打开网络看看数据在那里
我们在这个文档里面找到了对应的小区数据,言外之意只需要请求这个url即可得到想要的数据啦~
同时,在这些信息里面还有一个小区详情页的链接,里面有诸如小区的容积率、绿化率、开辟商等等信息,我们一起给它爬下来
大体思绪就是:
先用一些用户信息如浏览器类型、cookie等信息来包装爬虫
请求一遍小区列表的url来获取小区总数
通过小区总数来计算需要请求的页数,使用for循环来遍历每一页的小区
提取每页小区的数据,得到每个小区的详情页链接后继续发送请求来进入详情页
提取小区详情页数据
将所有结果生存为一个excel表格
废话不多说,直接上干货~
一、代码团体架构剖析
# 导入必要库(相当于工具箱)
import requests # 网络请求工具
import time # 时间控制工具
import random # 随机数生成器
import pandas as pd # 数据表格工具
from bs4 import BeautifulSoup # HTML解析器
import math # 数学计算工具
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表格输出的路径
# 主程序入口(程序起点)
if __name__ == "__main__":
# ================== 用户配置区域 ==================
CONFIG = {
"city": "fs", # 目标城市拼音(如: 佛山->fs,上海->sh)
"region": "nanhai", # 目标区域拼音(如: 南海区->nanhai)
"cookies": { # 必需Cookie
'lianjia_uuid': '自修修改',
'lianjia_token': '自行修改',
'security_ticket': '自行修改'
},
"srcid": "自行修改"
}
#输出的excel路径
output_name = f'{CONFIG["city"]}_{CONFIG["region"]}_小区数据.xlsx'
# ================================================
# 初始化会话
session = init_session(CONFIG)
# 执行爬取
start_time = time.time()
final_data = crawl_full_data(session)
# 保存结果
if final_data:
df = pd.DataFrame(final_data)[[
'小区名称', '参考均价', '成交信息', '出租信息', '行政区', '商圈', '建筑年代',
'详情页均价', '建筑类型', '房屋总数', '楼栋总数', '绿化率', '容积率',
'交易权属', '建成年代', '供暖类型', '用水类型', '用电类型',
'物业费', '附近门店', '物业公司', '开发商', '详情页链接'
]]
df.to_excel(output_name, index=False)
print(f"数据已保存至: {output_name}")
print(f"总计 {len(df)} 条数据,耗时 {(time.time()-start_time)/60:.1f} 分钟")
复制代码
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4