免费的网站管理系统,我制作了一个网站,上海公司车辆怎么查询违章,重庆seo网站建设目录 2025年安居客二手小区数据爬取观察目标网页观察详情页数据准备工作#xff1a;安装装备就像打游戏代码详解#xff1a;每行代码都是你的小兵完整代码大放送爬取结果 2025年安居客二手小区数据爬取
这段时间需要爬取安居客二手小区数据#xff0c;看了一下相关教程基本… 目录 2025年安居客二手小区数据爬取观察目标网页观察详情页数据准备工作安装装备就像打游戏代码详解每行代码都是你的小兵完整代码大放送爬取结果 2025年安居客二手小区数据爬取
这段时间需要爬取安居客二手小区数据看了一下相关教程基本也都有点久远趁着新年期间我也把自己爬取的思路跟流程记录一下(适合有一点爬虫基础的宝宝食用)如有不对欢迎私信交流~
观察目标网页
我们这里爬取的是安居客二手小区数据从官网进去 这里看到小区的总数量以及相关的小区的名字等信息红框框起来的数据一般是我们所关心的 当然点击小区可以进入详情页这里列出了关于该小区更加具体的信息我们这里尝试把框起来的数据都爬取下来 知道了我们需要爬取的数据之后下一步我们需要进一步分析这些数据的来源——数据是写在静态网页中还是从服务器异步加载过来的让我们分析一下网页结构 从上面这张图里我们可以发现数据是写在了html的源码里的每个小区的数据都包裹在一个li-row的a标签里面,因此我们只需要把list-cell里面的所有li-row都遍历一遍就可以获取一页的小区相关数据当然这里还没包含详情页数据~
观察详情页数据 我们可以发现这个小区详情页的数据会存放在maininfo的div大盒子里面然后这个大盒子里由house-price跟info两个div小盒子组成因此我们只需要从这两个小盒子里取数据即可~下面开始搓我们的代码
准备工作安装装备就像打游戏
1️⃣ 装Python环境不会的看这里 去Python官网下载最新版安装时记得勾选Add Python to PATH 2️⃣ 安装必备武器库打开cmd / powershell
pip install requests beautifulsoup4这俩库相当于你的爬虫工具箱一个负责上网一个负责解析网页 3️⃣ 准备VIP通行证 Cookie获取 cookie的作用可以让我们在模拟登陆的时候维持一下会话因为安居客这个网站每隔一段时间就需要输入一下验证码或者重新登陆设置一下cookie方便很多 具体自己浏览器的cookie在登陆之后按F12打开开发者工具找到Network标签 → 刷新页面 → 随便选个请求 → 复制一下响应标头里的set-cookie里的内容即可~
代码详解每行代码都是你的小兵
️ 先看整体作战计划 作战目标自动抓取指定数量的小区信息
作战路线列表页 → 详情页 → 数据保存
武器配置requests发请求BeautifulSoup解析
特殊装备自动重试机制防掉线核心代码拆解重点
配置侦察兵参数
# 伪装成浏览器重要
HEADERS {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)... # 完整UA太长省略
}# 你的VIP通行证定期更新
COOKIES {ajkAuthTicket: TT3f67c23d85c369b7018fcb4e..., # 填你复制的Cookiectid: 24
}创建不死鸟连接器
def create_session():session requests.Session()# 配置自动重试网络不好也不怕adapter HTTPAdapter(max_retriesRetry(total3, backoff_factor1,status_forcelist[500, 502, 503, 504]))session.mount(https://, adapter)return session这个相当于你的网络保镖遇到问题自动重试三次 3. 万能数据提取器
def safe_get_text(element, selector, defaultN/A): 安全提取文本找不到元素也不报错 target element.select_one(selector)return target.text.strip() if target else default使用场景就像用镊子精准夹取页面数据夹不到就返回默认值 4. 主力作战部队main函数
def main():# 输入要抓多少小区community_count int(input(想抓多少小区输入数字))# 创建侦察兵小队with open(小区数据.csv, w, encodingutf-8) as f:writer csv.writer(f)writer.writerow([小区名称, 价格, 地址, ...]) # 完整表头# 开始翻页抓取for page in range(1, 总页数1):# 获取当前页所有小区链接# 逐个访问详情页提取数据# 保存到CSV# 休息0.5秒防止被封这里用了with open自动管理文件就像有个小秘书帮你保存数据
完整代码大放送 安居客小区信息爬虫 import csv
import time
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
from bs4 import BeautifulSoup# 全局配置
# 请求头配置模拟浏览器访问
HEADERS {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0,Referer: https://member.anjuke.com/,Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,application/signed-exchange;vb3;q0.7,
}# Cookies配置需要定期更新
COOKIES {ajkAuthTicket: TT3f67c23d85c369b7018fcb4e1418466fTS1738219179437PBODYIotzzfNhkTJKGH_LuUrSfcNHUGin1wBsHjAQYBL3k0USZDHrUxL6RQUv1ZsFPDHjxvQl0uvU2zSgIEdSFCHUc7wYEf4slKV2U2F9rwNnp6xHgufTxMgdYWZEob_Tep-poDqBMbQQgayOQhsaRgVjw8K8ut3QqqMfPgYGpKJJBHwVER2CUIDfzgJGetduRhII81NXadF-HKyO1Hvr8W-,ctid: 24,
}# 重试策略配置
RETRY_STRATEGY Retry(total3, # 最大重试次数backoff_factor1, # 重试等待时间因子status_forcelist[500, 502, 503, 504], # 需要重试的状态码allowed_methodsfrozenset([GET, POST]) # 允许重试的HTTP方法
)# 其他配置
BASE_URL https://foshan.anjuke.com/community/p{page}/ # 分页URL模板
REQUEST_DELAY 0.5 # 请求间隔时间秒防止被封禁
CSV_HEADERS [ # CSV文件表头小区名称, 价格, 地址, 小区链接,物业类型, 权属类别, 竣工时间, 产权年限, 总户数, 总建筑面积, 容积率, 绿化率, 建筑类型, 所属商圈, 统一供暖, 供水供电, 停车位, 物业费,停车费, 车位管理费, 物业公司, 小区地址, 开发商, 在售房源, 在租房源
]# 工具函数
def create_session():创建带有重试策略的请求会话返回requests.Session - 配置好的会话对象session requests.Session()adapter HTTPAdapter(max_retriesRETRY_STRATEGY)session.mount(https://, adapter)session.mount(http://, adapter)return sessiondef safe_get_text(element, selector, defaultN/A):安全获取元素文本内容参数element: BeautifulSoup对象 - 父元素selector: str - CSS选择器default: str - 默认返回值返回str - 元素的文本内容或默认值target element.select_one(selector)return target.get_text(stripTrue) if target else default# 主程序
def main():# 用户输入community_count int(input(请输入需要抓取的小区数量))# 初始化会话session create_session()# 准备CSV文件with open(communities.csv, modew, newline, encodingutf-8) as csv_file:writer csv.writer(csv_file)writer.writerow(CSV_HEADERS)page_count (community_count // 25) (1 if community_count % 25 else 0)collected 0 # 已收集数量# 分页抓取for current_page in range(1, page_count 1):print(f\n➤ 正在处理第 {current_page}/{page_count} 页...)# 获取列表页try:list_url BASE_URL.format(pagecurrent_page)response session.get(list_url,headersHEADERS,cookiesCOOKIES,timeout10)response.raise_for_status()except Exception as e:print(f⚠️ 列表页请求失败: {e})continue# 解析小区列表list_soup BeautifulSoup(response.text, html.parser)communities list_soup.find_all(a, class_li-row)# 遍历每个小区for community in communities:if collected community_count:break# 提取基本信息name safe_get_text(community, div.li-title)price safe_get_text(community, div.community-price)address safe_get_text(community, div.props)link community.get(href, )print(f\n▌ 正在处理小区{name})# 获取详情页try:detail_response session.get(link,headersHEADERS,cookiesCOOKIES,timeout15)detail_response.raise_for_status()except Exception as e:print(f ⚠️ 详情页请求失败: {e})continue# 解析详情页detail_soup BeautifulSoup(detail_response.text, html.parser)details []# 提取主要信息for index in range(14): # 0-13对应预设的标签value safe_get_text(detail_soup, fdiv.value.value_{index})details.append(value)# 提取额外信息extra_info {停车费: N/A,车位管理费: N/A,物业公司: N/A,小区地址: N/A,开发商: N/A}for column in detail_soup.find_all(div, class_column-1):label safe_get_text(column, div.label)value safe_get_text(column, div.value)for key in extra_info:if key in label:extra_info[key] value# 提取房源信息sale detail_soup.find(div, class_sale)rent detail_soup.find(div, class_rent)sale_info f{safe_get_text(sale, i.source-number)} {safe_get_text(sale, i.source-unit)} if sale else N/Arent_info f{safe_get_text(rent, i.source-number)} {safe_get_text(rent, i.source-unit)} if rent else N/A# 构建完整数据行row [name, price, address, link,*details,*extra_info.values(),sale_info, rent_info]# 写入CSVwriter.writerow(row)collected 1print(f ✅ 已保存 {collected}/{community_count} - {name})# 请求间隔time.sleep(REQUEST_DELAY)print(\n 数据抓取完成结果已保存到 communities.csv)if __name__ __main__:main()爬取结果
这是爬取的结果如果只要其中的部分列我建议直接删除最终的csv表格而不是修改代码代码能运行就尽量别动 -_-!!! 完结撒花~
参考文章 [1]: 菜鸟爬虫——获取安居客二手房信息 [2]:Python爬虫之路(9)–an居客数据获取 [3]:Python之爬取安居客网二手房小区详情页数据 [4]:python使用代理爬取安居客二手房数据一 [5]:项目爬取安居客二手房房屋信息 [6]:【爬虫】安居客二手房数据爬取