一、为什么要学习网络爬虫?
在财务大数据分析中,数据来源至关重要。除了企业内部的ERP系统、财务数据库外,政策文件、行业动态、监管公告等外部信息同样是财务决策的重要依据。例如:
l财政部发布的会计准则解释直接影响企业账务处理
l税收政策调整关系到企业税负测算
l行业监管动态影响企业合规风险评估
手动浏览网站收集这些信息效率低下,而Python网络爬虫可以自动化、批量化的采集所需数据,是财务数据分析师的必备技能。
二、本案例:爬取财政部"政策发布"栏目标题
我们以财政部官网的"政策发布"栏目为例,演示如何批量采集政策文件标题、发布日期和链接地址,并导出为Excel文件。
三、爬虫流程六步法
第一步:导入必要的工具库("准备工具箱")
import requests # 负责发送网络请求,获取网页内容
import re # 负责正则表达式处理,清洗文本
from bs4 import BeautifulSoup # 负责解析HTML网页结构
import pandas as pd # 负责数据整理与Excel导出
import time # 负责控制请求频率,避免被封
学习要点:
l“requests”是Python的"网络浏览器",模拟人工访问网页
l“BeautifulSoup”是"网页结构解析器",像剥洋葱一样层层拆解HTML标签
l“pandas”是"数据整理专家",将零散数据变成整齐的表格
第二步:确定目标网址("找准入口")
构建200个页面的URL列表
url_list = ['https://kjs.mof.gov.cn/zhengcefabu/index_' + str(i) + '.htm',如图:
for i in range(1, 200)]
补充首页地址
url_list.append('https://kjs.mof.gov.cn/zhengcefabu/index.htm')
学习要点:
l观察网站分页规律:`index_1.htm`、`index_2.htm`……`index_199.htm`
l使用列表推导式批量生成URL,体现Python的简洁优雅
l别忘了把首页(无下标的`index.htm`)也加入列表
第三步:伪装浏览器身份("穿上"隐身衣")
设置User-Agent,模拟真实浏览器访问,如图:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'}
学习要点:
l网站服务器会识别访问者身份,拒绝"裸奔"的爬虫程序
l`User-Agent` 告诉服务器:"我是用Chrome浏览器访问的正常用户"
l这是爬虫的"基本礼仪",也是避免被封IP的关键技巧
第四步:遍历页面并提取数据("按图索骥")
all_data = [] # 创建空列表,存放所有采集的数据
for url in url_list:
4.1 发送请求并获取响应
response = requests.get(url, headers=headers)
response.encoding = response.apparent_encoding # 自动识别编码
4.2 用BeautifulSoup解析网页
soup = BeautifulSoup(response.text, 'html.parser')
4.3 定位目标标签(关键!)
list_container = soup.find('ul', class_='liBox') # 找到class为liBox的ul标签
if list_container: # 如果找到了目标容器
for li in list_container.find_all('li'): # 遍历每个li标签
text = li.get_text(strip=True) # 提取纯文本内容
title_date_pair = text.split('\n') # 按换行符分割标题和日期
提取链接地址
title_href = li.find('a')['href']
for i in title_date_pair:
all_data.append({
'Date': i[-10:], # 截取后10位作为日期
'Title': i[:-10], # 前面部分作为标题
'href': 'https://kjs.mof.gov.cn/zhengcefabu/' + title_href[1:]
})
time.sleep(1) # 礼貌等待1秒,避免请求过快
学习要点:
lF12开发者工具:在浏览器中按F12,查看网页HTML结构,找到数据所在的标签(本例中是`<ul class="liBox">`下的`<li>`标签)
lCSS选择器:`soup.find('ul', class_='liBox')` 像GPS定位一样精准找到数据容器,如图:
l数据拆解:标题和日期在同一文本中,用`split('\n')`或字符串切片分离
l礼貌爬虫:`time.sleep(1)` 控制访问频率,尊重服务器负载
第五步:数据清洗与筛选("去粗取精")
将列表转换为DataFrame表格
df = pd.DataFrame(all_data)
按关键词筛选(例如:查找"内部控制"相关政策)
key_word = input('请输入您要查询的关键词:')
df = df[df['Title'].str.contains(key_word)]
统计采集数量
news_count = len(df['Title'])
print('本次共采集%s条信息!' % news_count)
学习要点:
l“DataFrame”是pandas的核心数据结构,像Excel工作表一样行列分明
l“str.contains()”实现模糊匹配,快速筛选含关键词的政策文件
l“input()”实现人机交互,让程序更灵活
第六步:导出到Excel("成果归档")
将结果写入Excel文件
df.to_excel(key_word + '政策发布链接表.xlsx', index=False)
print('数据采集完成!')
学习要点:
l“to_excel()”一键导出,文件名动态拼接关键词
l“index=False”不导出行序号,保持表格整洁
l导出的Excel可直接用于财务政策研究、合规清单编制等工作
四、完整代码框架(供对照练习)
本文作为《财务大数据分析(基于Python)》教材的课外学习指导,旨在帮助初学者建立爬虫思维框架,实现从"手工查政策"到"自动采数据"的能力跃迁。