请求基础代码:爬取指定URL教会规模字段并构建排名表
基础代码片段与调试指南
核心实现逻辑
- 循环遍历ID范围5550-5615,逐个请求目标页面
- 提取「教会规模」字段(需先通过浏览器工具确认对应元素ID)
- 收集有效数据后按规模降序排序
- 输出结构化的排名表
可调试代码片段
import requests from bs4 import BeautifulSoup # 存储教会数据的容器 church_records = [] # 遍历目标ID区间 for church_id in range(5550, 5616): target_url = f"https://oppsearch.ucc.org/web/fastdetails.aspx?id={church_id}&KeepThis=false&TB_iframe=true&height=&width=" try: # 发送HTTP请求 response = requests.get(target_url) response.raise_for_status() # 捕获请求失败的情况 soup = BeautifulSoup(response.content, "html.parser") # --- 关键调试点:替换为实际的教会规模元素ID --- # 打开id=5611的页面,右键教会规模字段→检查,复制对应的id属性值 size_element = soup.find(id="ContentPlaceHolder1_churchSize") # 示例ID,需自行验证 if size_element: # 提取并清理字段文本 raw_size = size_element.get_text(strip=True) # 尝试转换为数值(适配数字型规模) try: size_value = int(raw_size) except ValueError: # 若为文本描述(如"Medium"),保留原内容 size_value = raw_size # 可选:提取教会名称作为辅助信息 name_element = soup.find(id="ContentPlaceHolder1_churchName") church_name = name_element.get_text(strip=True) if name_element else "未知教会" church_records.append({ "id": church_id, "name": church_name, "size": size_value }) print(f"已获取ID {church_id} 的数据") else: print(f"ID {church_id} 未找到教会规模字段") except requests.exceptions.RequestException as err: print(f"请求ID {church_id} 失败: {err}") # 按教会规模降序排序 # 适配数值与文本混合的排序场景 def sort_criteria(item): if isinstance(item["size"], int): return -item["size"] # 数值降序 else: return item["size"].lower() # 文本按字典序排序 sorted_records = sorted(church_records, key=sort_criteria) # 输出排名结果 print("\n--- 教会规模排名表 ---") for rank, record in enumerate(sorted_records, 1): print(f"{rank}. ID: {record['id']} | 教会名称: {record['name']} | 规模: {record['size']}")
关键调试提示
- 确认元素ID:打开id=5611的页面,用浏览器F12开发者工具定位「教会规模」字段,复制其
id属性替换代码中的示例ID - 数据类型适配:如果规模是文本描述(如"Small/Large"),可调整排序逻辑匹配需求
- 请求频率控制:若爬取时遇到限制,可添加
time.sleep(1)(需导入time模块)降低请求速度 - 异常扩展:可根据实际情况补充字段缺失、数据格式异常的处理逻辑
内容的提问来源于stack exchange,提问作者Jatin Kashyap
相关产品推荐
相关产品推荐

