2026/4/17 6:48:53
网站建设
项目流程
广东哪里网站建设,微博wordpress,网络内容建设包括什么,网站文章页图片不显示CDE药品审批数据爬取分析项目——核心知识点和关联拓展知识点 一、核心知识点(项目直接应用,逐点拆解) (一)网络爬虫与HTTP通信(爬虫核心模块) 1. requests库(HTTP请求核心) 2. 请求头(Headers)构造(反爬关键) 3. 反爬策略与应对(爬虫稳定性核心) 4. HTTPS证书处…CDE药品审批数据爬取分析项目——核心知识点和关联拓展知识点一、核心知识点(项目直接应用,逐点拆解)(一)网络爬虫与HTTP通信(爬虫核心模块)1. requests库(HTTP请求核心)2. 请求头(Headers)构造(反爬关键)3. 反爬策略与应对(爬虫稳定性核心)4. HTTPS证书处理(urllib3)5. 响应内容处理(gzip压缩兼容)(二)数据解析与结构化处理1. JSON数据解析(接口数据核心)2. 字典数据安全提取(数据清洗基础)3. 字符串清洗(非结构化数据处理)(三)数据分析(Pandas核心模块)1. DataFrame构建(结构化存储核心)2. 分类数据统计(value_counts)3. 自定义分类统计(业务化分析核心)4. 数据筛选与布尔索引5. 数据排序与TOP N分析(四)数据可视化(Matplotlib/Seaborn模块)1. 中文字体适配(可视化基础)2. 柱状图(barplot)绘制与标注3. 饼图(pie)绘制(五)工程化编程与文件操作1. 模块化函数设计(代码架构核心)2. 文件路径与目录操作(os库)3. CSV文件保存(Pandas)(六)异常处理(程序稳定性核心)二、关联拓展知识点(进阶/同类替代方案,超详细)(一)爬虫进阶拓展1. requests.Session会话维持2. 异步爬虫(aiohttp)3. 代理IP池(二)数据分析进阶拓展1. 数据透视表(pivot_table)2. 时间序列分析(三)可视化进阶拓展1. 交互式可视化(Plotly)2. 地理可视化(pyecharts)(四)工程化进阶拓展1. 配置文件管理(yaml)2. 日志模块(logging)3. 定时任务(APScheduler)三、知识点总结(核心要点回顾)该项目是Python全流程数据应用实战,覆盖从网络数据采集到业务价值解读的完整链路,以下对所有知识点进行“定义+原理+项目应用+易错点+拓展”的四维拆解,确保每个知识点都讲透、讲全。一、核心知识点(项目直接应用,逐点拆解)(一)网络爬虫与HTTP通信(爬虫核心模块)1. requests库(HTTP请求核心)定义:Python最常用的HTTP请求库,封装了底层的urllib,支持GET/POST/PUT等所有HTTP方法,语法简洁。核心原理:模拟浏览器与服务器的HTTP交互,发送请求报文→接收响应报文→解析响应内容。项目应用:requests.post(url, headers=headers, data=post_data, timeout=15, verify=False):发送POST请求,参数说明:url:CDE药品审批接口地址;headers:模拟浏览器的请求头(核心反爬配置);data:POST表单参数(页码、分页大小等);timeout=15:设置15秒超时,避免请求卡死;verify=False:跳过HTTPS证书验证(解决CDE官网证书问题)。r.encoding = r.apparent_encoding:自动识别响应编码,避免中文乱码。r.status_code:判断响应状态码(200为成功,非200则输出失败信息)。易错点:忘记设置timeout:请求可能因网络问题无限等待,导致程序卡死;未处理r.status_code:接口返回403/500时,仍尝试解析数据,引发后续错误。拓展:requests.get()(GET请求,参数拼在URL)、requests.session()(会话维持,见拓展模块)。2. 请求头(Headers)构造(反爬关键)定义:HTTP请求报文的头部信息,包含客户端标识、请求来源、数据格式等,是服务器验证请求合法性的核心依据。核心原理:服务器通过Headers识别请求是否来自“合法浏览器”,而非爬虫程序。项目应用:构造的核心Headers字段及作用:字段名取值示例核心作用User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64)…伪装浏览器(Chrome/Edge),避免被识别为爬虫Refererhttps://www.cde.org.cn/main/xxgk/listpage/…告诉服务器请求来源页面,防跨域/防直接请求接口Originhttps://www.cde.org.cn告诉服务器请求的源域名,验证跨域合法性CookieFSSBBIl1UgzbN7N80S=BN6DrLZ4J10nZ…维持用户会话,部分接口需登录态才能访问Content-Typeapplication/x-www-form-urlencoded指定POST数据格式为表单格式X-Requested-WithXMLHttpRequest标识为AJAX异步请求,匹配接口的请求特征易错点:遗漏Referer/Origin:接口验证来源,直接返回403 Forbidden;Cookie过期:硬编码的Cookie失效后,请求返回登录页面,解析JSON失败。拓展:动态获取Cookie(通过登录接口模拟登录,自动更新Cookie)。3. 反爬策略与应对(爬虫稳定性核心)定义:网站为防止爬虫过度请求而设置的限制机制,爬虫需通过技术手段规避。项目应用的反爬应对:频率限制应对:time.sleep(random.uniform(1,2))——设置1-2秒随机间隔,避免固定间隔被识别为机器;伪装应对:完整Headers+浏览器User-Agent;异常应对:try-except捕获请求异常,跳过失败页继续爬取。易错点:使用固定间隔(如time.sleep(1)):易被服务器识别为机器;无异常捕获:单页请求失败导致整个程序崩溃。拓展:IP代理池(应对IP封禁)、请求频率动态调整(根据响应状态码调整间隔)。4. HTTPS证书处理(urllib3)定义:HTTPS请求需验证服务器证书,部分网站证书配置不规范会触发警告/报错。项目应用:urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning):关闭HTTPS不安全警告;requests.post(verify=False):跳过证书验证,确保请求正常执行。易错点:仅关闭警告但未设置verify=False:请求仍会因证书问题失败。拓展:手动指定CA证书文件(verify='/path/cacert.pem'),提升安全性。5. 响应内容处理(gzip压缩兼容)定义:服务器为减小传输体积,会将响应内容用gzip压缩,需解压后才能解析。项目应用:try:returnr.text# 先尝试读取明文except:importgzipfromioimportBytesIO data=gzip.decompress(r.content)# 解压gzip压缩的二进制内容returndata.decode('utf-8')易错点:直接读取r.text而不处理压缩:返回乱码,JSON解析失败。拓展:自动识别响应头Content-Encoding(如gzip/deflate),针对性解压。(二)数据解析与结构化处理1. JSON数据解析(接口数据核心)定义:JSON(JavaScript Object Notation)是轻量级数据交换格式,键值对结构,与Python字典高度兼容。核心原理:json.loads()将JSON字符串→Python字典/列表;json.dumps()将Python对象→JSON字符串。项目应用:get_data()函数中json.loads(medical_text):解析接口返回的JSON字符串,提取data.records核心数据;json.dumps(..., ensure_ascii=False, indent=2):格式化输出JSON,ensure_ascii=False保证中文正常显示。异常处理:exceptjson.JSONDecodeErrorase:print(f'JSON解析失败:{str(e)}')print(f'原始返回数据:{medical_text[:500]}')# 输出前500字符,定位解析失败原因易错点:未捕获JSONDecodeError:接口返回非JSON数据(如HTML错误页)时,程序直接崩溃;忽略ensure_ascii=False:格式化输出时中文显示为\uXXXX编码。拓展:jsonpath库(按路径提取JSON数据,如jsonpath.jsonpath(medical_data, '$..records'))。2. 字典数据安全提取(数据清洗基础)定义:使用dict.get(key, default)提取字典值,避免键不存在引发KeyError。项目应用:drug_name=[record.get('drgnamecn','')forrecordinrecords]record.get('drgnamecn', ''):若drgnamecn键存在,返回值;否则返回空字符串,避免列表生成式报错。易错点:直接使用record['drgnamecn']:键不存在时触发KeyError,中断数据提取。拓展:嵌套字典提取(如record.get('data', {}).get('records', [])),多层级安全取值。3. 字符串清洗(非结构化数据处理)定义:对不规则字符串进行拆分、去空格、过滤等操作,转为结构化数据。项目应用:company=[record.get('companys','').strip(';').split(';')[0]forrecordinrecords]strip(';'):去除字符串首尾的;;split(';')[0]:按;拆分多企业名称,只取第一个企业。易错点:未处理空字符串:record.get('companys', '')为空时,split(';')[0]仍返回空,需结合业务判断是否合理;拆分后索引越界:如字符串为;时,split(';')[0]为空,需加判断。拓展:正则表达式(re库)清洗复杂字符串(如提取企业名称中的省份、过滤特殊字符)。(三)数据分析(Pandas核心模块)1. DataFrame构建(结构化存储核心)定义:Pandas的核心数据结构,二维表格型数据,行表示样本,列表示特征,支持高效的统计、筛选、排序。项目应用:df=pd.DataFrame({'序号':row_id,'药品名称':drug_name,'申报企业':company,'药品类型':drug_type,'申请类型':apply_type,'受理号':accept_id,'申报日期':create_date,'注册类型':register_kind})将提取的7个核心字段整合为DataFrame,实现从“列表/字典”到“表格”的结构化转换。易错点:字段长度不一致:如row_id长度与drug_name不一致,会触发ValueError;空值未处理:后续统计时需注意NaN值的影响。拓展:pd.DataFrame.from_dict()(从字典列表直接构建DataFrame)、pd.read_json()(从JSON直接构建)。2. 分类数据统计(value_counts)定义:统计Series中每个唯一值的出现次数,返回降序排列的结果,是分类数据分析的核心方法。项目应用:drug_type_count=df["药品类型"].value_counts()# 统计各药品类型的数量apply_type_count=df["申请类型"].value_counts()# 统计各申请类型的数量易错点:未处理空值:value_counts()默认排除NaN,需用value_counts(dropna=False)包含空值;混淆绝对数与相对数:value_counts()返回绝对数,需手动计算占比。拓展:value_counts(normalize=True)直接返回占比(百分比)。3. 自定义分类统计(业务化分析核心)定义:基于业务规则(如关键词匹配)对数据进行自定义分类,再统计各类别的数量。项目应用:企业地区匹配统计:构建province_map字典:键为地区(省份/国家),值为匹配关键词;遍历企业名称,匹配关键词确定所属地区;用province_count字典统计各地区数量。核心代码: