为了便于广大会计人员学习会计准则,加深对企业会计准则内容的理解,会计准则委员会收集了实务中反映的企业会计准则相关问题,组织企业会计准则咨询委员开展研究,就相关问题进行了解答,并在会计准则委员会网站发布,供广大会计人员学习参考。今天,我们就来爬取企业会计准则解读吧。
网址:
https://www.casc.org.cn/qykjzzjd/
步骤拆解:
1、观察网页
2、请求数据
3、解析数据
4、保存数据——docx库入门
第一步 观察网页
1、谷歌浏览器右键“检查”,点击“Network”,刷新页面。
2、点击最上面名为“qykjzzjd/”的链接,
3、点击“Response”,发现我们需要的数据在这里。
第二步 请求数据
我们使用requests库请求数据,查看“Headers”发现请求方法为get请求。
于是我们输入如下代码,先看看有没有请求成功,我们发现请求结果是<Response[200]>,数字是200说明请求成功,数字不是200说明请求失败。
我们再来看看我们请求的结果是什么,我们输入r.text,发现返回值是乱码。
这是什么原因呢?
想象一个场景,假设你完全不懂英语,一个人对你说“Good night”,你是不是会把这句话解析成“姑奶奶”(这是武林外传小贝穿越的场景),这就是驴头不对马嘴了,用中文解析英文固然如此。现实世界有不同的语言,计算机世界也有不同的语言,我们叫它为编码方式,常见编码方式有:ASCII编码、GBK编码、UTF-8编码。
我们采用reqeusts库请求数据的时候,默认encoding是ISO-8859-1。但我们在查看“Response”,在<head>标签中的<meta>标签中,有一个“charset=’utf-8’”,即网站的编码方式是utf-8。我们用ISO-8859-1解码utf-8,肯定会出现乱码。
apparent_encoding会从网页的内容中分析网页编码的方式,当网页出现乱码时可以把apparent_encoding的编码格式赋值给encoding。此时我们再看r.text,发现没有乱码了。
代码如下:
import requests
from bs4 import BeautifulSoup
from docx import Document
#1、请求数据
url='https://www.casc.org.cn/qykjzzjd/'
r=requests.get(url)
r.encoding=r.apparent_encoding
第三步 解析数据
我们采用BeautifulSoup库来解析数据。
通过检查网页,我们发现所有企业会计准则解读存储在class="newsConclearfix"的<div>标签下,每行企业会计准则解读存储在上述标签的’li’标签下,在该标签下我们可获取子链接。
获取子链接后,如下图所示,我们发现企业会计准则解读的具体信息存储子链接的class="pageInfo"的<div>标签下,其中标题存储在<h1>标签中,标题下的备注存储在class="pageInfoLittle"的<div>标签中,正文段落存储在class="infoCon"的<div>标签中。
代码如下:
#2、解析数据
soup=BeautifulSoup(r.text,'html.parser')
doc=Document()
for li in soup.find('div',class_="newsCon clearfix").find_all('li'):
url2='https:'+li.find('a').get('href')#获取子页面网址
r2=requests.get(url2)#请求子页面数据
r2.encoding=r2.apparent_encoding
soup2=BeautifulSoup(r2.text,'html.parser')#解析子页面数据
content=soup2.find('div',class_="pageInfo")#获取子页面数据
title=content.h1.text#获取子页面标题
info=content.find('div',class_="pageInfoLittle").text#获取子页面标题下备注
paragraph=content.find('div',class_="infoCon").text#获取子页面正文
第四步 存储数据
我们想把网页内容存储成文档,这就需要docx库。
1、docx库的安装
错误方法(不要尝试,不要尝试,不要尝试!)
这是我踩过的坑。
通过Anaconda的Anaconda Prompt命令窗口安装docx,输入一下指令:
pip install docx
命令窗口显示成功后,在开发环境中输入import docx测试三方库有没有成功,显示
Import Error: No module named 'exceptions'
原因是通过命令行下载的docx安装包还没有完全兼容python3,因此需要自己找一个兼容的包进行安装。
正确方法
(1)下载docx库的whl文件。
下载地址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/
在以上网址中点击
python_docx‑0.8.10‑py2.py3‑none‑any.whl进行下载
(2)安装docx库
打开Anaconda Prompt,选择开始菜单-Anaconda3-Anaconda Prompt。
在命令行中输入:pip install whl文件路径+whl文件名称。
以本电脑为例,下载的docx库的whl文件存放在C:\Users\mi\Downloads文件夹中,因此在命令行中输入:
pip install C:\Users\mi\Downloads\python_docx-0.8.10-py2.py3-none-any.whl
2、docx库的使用——以企业会计准则解读的保存为例
(1)引入docx库
from docx import Document
(2)创建文档对象
doc=Document()
(3)文档编辑
doc.add_heading(title)#添加标题
doc.add_paragraph(info)#添加段落
doc.add_paragraph(paragraph)#添加段落
(4)文档保存
doc.save('企业会计准则解读.docx')#保存文档
全套代码:
import requests
from bs4 import BeautifulSoup
from docx import Document
#1、请求数据
url='https://www.casc.org.cn/qykjzzjd/'
r=requests.get(url)
r.encoding=r.apparent_encoding
#2、解析数据
soup=BeautifulSoup(r.text,'html.parser')
doc=Document()
for li in soup.find('div',class_="newsCon clearfix").find_all('li'):
url2='https:'+li.find('a').get('href')#获取子页面网址
r2=requests.get(url2)#请求子页面数据
r2.encoding=r2.apparent_encoding
soup2=BeautifulSoup(r2.text,'html.parser')#解析子页面数据
content=soup2.find('div',class_="pageInfo")#获取子页面数据
title=content.h1.text#获取子页面标题
info=content.find('div',class_="pageInfoLittle").text#获取子页面标题下备注
paragraph=content.find('div',class_="infoCon").text#获取子页面正文
#3、保存数据
doc.add_heading(title) #添加标题
doc.add_paragraph(info) #添加段落
doc.add_paragraph(paragraph) #添加段落
doc.save('企业会计准则解读.docx') #保存文档
**结果如下:**
