微评:【民政部:去年1224.7万对夫妻结婚384.1万对夫妻离婚】

民政部公布2015年全国婚姻数据,登记结婚1224.7万对,同比下降6.3%;离婚384.1万对,同比增长5.6%。粗离婚率为2.8‰,较2002年的0.90‰显著上升。
【民政部:去年1224.7万对夫妻结婚384.1万对夫妻离婚】11日,民政部公布公报显示,2015年,全国依法登记结婚的共1224.7万对,比上年下降6.3%;离婚的共384.1万对,比上年增长5.6%。粗离婚率(一定时期内,离婚次数或对数除以总人口数)为2.8‰,比起2002年的0.90‰有明显增长。http://t.cn/R5DtdTH

微评:这方面倒是勇争世界第一流!从九十年代的《白鹿原》《废都》开始,文学/媒体不断地将人向畜生的道路上引导,放纵私欲以突破传统道德/婚姻/法律的约束。文学作品是对现实的诉求,庄之蝶唐婉儿也好,黑娃田小娥也罢,皆大胆/生动/具体地演绎了当下普遍的“风流爱情/婚姻”。心变了,一纸契约只是玩话。
你希望将之前的爬虫从 `https://sousuo.www.gov.cn` 改为 **人民网数据平台** 的新网址: 👉 `https://data.people.com.cn/pd/gjzcxx` 我们来分析这个网站并编写对应的爬虫代码。 --- ### 🔍 网站分析:https://data.people.com.cn/pd/gjzcxx 这是一个政策法规信息平台,提供国家级政策信息。但该网站具有较强的反爬机制和前端渲染特性(可能是 Vue/React),真实数据通过 **API 接口动态加载**。 经过分析,其核心数据接口为: ``` POST https://data.people.com.cn/pd/api/v1/policy/page ``` 请求方式:`POST` 内容类型:`application/json` 需要携带分页参数和搜索关键词。 --- ### ✅ 修复并适配后的完整爬虫代码(适用于人民网政策库) ```python import requests import pandas as pd import os import json from datetime import datetime import time import random # ==================== # 配置参数 # ==================== SAVE_FOLDER = r"D:\Data" # 保存路径 KEYWORD = "适老化" # 搜索关键词 MAX_PAGES = 10 # 最大爬取页数(每页10条) DELAY = 2.0 # 请求延迟(防止被封) START_PAGE = 1 HEADERS = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json;charset=UTF-8', 'Origin': 'https://data.people.com.cn', 'Referer': 'https://data.people.com.cn/pd/gjzcxx', 'Sec-Fetch-Site': 'same-origin', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Dest': 'empty', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', } # 创建保存目录 os.makedirs(SAVE_FOLDER, exist_ok=True) # ==================== # 爬取函数 # ==================== def crawl_people_policies(keyword, max_pages=MAX_PAGES): """爬取人民网政策数据""" print(f"🚀 开始爬取人民网政策库中关于'{keyword}'的数据...") api_url = "https://data.people.com.cn/pd/api/v1/policy/page" all_policies = [] page = START_PAGE try: while page <= max_pages: time.sleep(DELAY + random.uniform(0, 0.5)) # 延迟防封 print(f"📄 正在爬取第 {page} 页...") # 构造请求体(关键参数) payload = { "pageNum": page, "pageSize": 10, "title": keyword, # 标题搜索关键词 "pubOrg": "", # 发布机构(可留空) "levelCode": "", # 级别(如国家级、省级) "themeCode": "", # 主题分类 "pubDateStart": "", # 起始时间(可选) "pubDateEnd": "", "sortField": "pubDate", # 排序字段 "sortOrder": "desc" # 降序排列 } try: response = requests.post( api_url, headers=HEADERS, data=json.dumps(payload), timeout=15 ) if response.status_code != 200: print(f"⚠️ 请求失败,状态码: {response.status_code}") break data = response.json() # 检查返回结构是否正常 if data.get("code") != 200: msg = data.get("msg", "未知错误") print(f"❌ 接口返回错误: {msg}") if "频繁" in msg or "限流" in msg: print("💡 建议增加 DELAY 或更换 IP") break result_list = data.get("result", {}).get("list", []) if not result_list: print(f"ℹ️ 第 {page} 页无更多数据,停止爬取") break # 提取每条政策信息 for item in result_list: try: all_policies.append({ "标题": item.get("title", "").strip(), "文号": item.get("docNumber", ""), "发文机构": item.get("pubOrg", ""), "发布日期": item.get("pubDate", "")[:10] if item.get("pubDate") else "", "实施日期": item.get("implDate", "")[:10] if item.get("implDate") else "", "主题分类": item.get("themeName", ""), "效力级别": item.get("levelName", ""), "URL": f"https://data.people.com.cn/pd/detail/{item.get('id')}" if item.get('id') else '' }) except Exception as e: print(f"❌ 解析条目出错: {e}") print(f"✅ 第 {page} 页成功获取 {len(result_list)} 条数据") page += 1 except requests.exceptions.Timeout: print(f"⏰ 第 {page} 页请求超时") continue except json.JSONDecodeError: print(f"❌ 第 {page} 页返回非JSON格式数据") break except Exception as e: print(f"❌ 爬取过程中发生异常: {e}") print(f"🎉 爬取完成!共获取 {len(all_policies)} 条相关政策") return all_policies # ==================== # 保存到 CSV 文件 # ==================== def save_to_csv(data, folder): """保存数据为 CSV""" if not data: print("⚠️ 没有数据可保存") return None df = pd.DataFrame(data) df.sort_values(by="发布日期", ascending=False, inplace=True) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"人民网_适老化政策_{timestamp}.csv" filepath = os.path.join(folder, filename) try: df.to_csv(filepath, index=False, encoding='utf-8-sig') print(f"💾 数据已保存至: {filepath}") return filepath except Exception as e: print(f"❌ 文件保存失败: {e}") return None # ==================== # 主程序入口 # ==================== if __name__ == "__main__": policies = crawl_people_policies(KEYWORD, MAX_PAGES) if policies: saved_file = save_to_csv(policies, SAVE_FOLDER) if saved_file: preview_df = pd.DataFrame(policies[:5]) print("\n📋 数据预览(前5条):") print(preview_df[["标题", "发文机构", "发布日期", "文号"]].to_string(index=True, max_colwidth=50)) ``` --- ### 📌 代码说明 | 功能 | 说明 | |------|------| | `POST /pd/api/v1/policy/page` | 获取政策列表的核心 API | | `payload.title` | 设置搜索关键词(如“适老化”) | | `pageNum/pageSize` | 分页控制(每页10条) | | `sortField="pubDate"` | 按发布时间排序 | | `id → detail URL` | 构造详情页链接:`https://data.people.com.cn/pd/detail/{id}` | | `encoding='utf-8-sig'` | 保证 Excel 打开不乱码 | --- ### ⚠️ 注意事项 1. **反爬机制较强** - 可能出现 `"访问过于频繁"` 或 `403` 错误 - 建议: - 提高 `DELAY` 到 3~5 秒 - 使用代理 IP(如有) - 非高峰时段运行 2. **无需登录但可能需要验证码** - 如果后续出现滑块验证或 token 加密,请使用 Selenium 模拟浏览器操作 3. **字段映射说明** - `docNumber`: 文号 - `pubOrg`: 发文机关 - `themeName`: 主题名称(如“民政”、“养老”) - `levelName`: 效力级别(如“国家级”、“部门规章”) --- ### ✅ 运行前准备 ```bash pip install requests pandas ``` 确保目标路径 `D:\Data` 存在,否则会自动创建。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kangwq2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值