為了便于廣大會(huì)計(jì)人員學(xué)習(xí)會(huì)計(jì)準(zhǔn)則蹋半,加深對(duì)企業(yè)會(huì)計(jì)準(zhǔn)則內(nèi)容的理解嗅榕,會(huì)計(jì)準(zhǔn)則委員會(huì)收集了實(shí)務(wù)中反映的企業(yè)會(huì)計(jì)準(zhǔn)則相關(guān)問題窥突,組織企業(yè)會(huì)計(jì)準(zhǔn)則咨詢委員開展研究谬墙,就相關(guān)問題進(jìn)行了解答今布,并在會(huì)計(jì)準(zhǔn)則委員會(huì)網(wǎng)站發(fā)布经备,供廣大會(huì)計(jì)人員學(xué)習(xí)參考。今天部默,我們就來爬取企業(yè)會(huì)計(jì)準(zhǔn)則解讀吧侵蒙。
網(wǎng)址:
https://www.casc.org.cn/qykjzzjd/
步驟拆解:
1、觀察網(wǎng)頁
2傅蹂、請(qǐng)求數(shù)據(jù)
3纷闺、解析數(shù)據(jù)
4、保存數(shù)據(jù)——docx庫入門
第一步 觀察網(wǎng)頁
1份蝴、谷歌瀏覽器右鍵“檢查”犁功,點(diǎn)擊“Network”,刷新頁面婚夫。
2浸卦、點(diǎn)擊最上面名為“qykjzzjd/”的鏈接,
3案糙、點(diǎn)擊“Response”限嫌,發(fā)現(xiàn)我們需要的數(shù)據(jù)在這里。
第二步 請(qǐng)求數(shù)據(jù)
我們使用requests庫請(qǐng)求數(shù)據(jù),查看“Headers”發(fā)現(xiàn)請(qǐng)求方法為get請(qǐng)求时捌。
于是我們輸入如下代碼怒医,先看看有沒有請(qǐng)求成功,我們發(fā)現(xiàn)請(qǐng)求結(jié)果是<Response[200]>奢讨,數(shù)字是200說明請(qǐng)求成功稚叹,數(shù)字不是200說明請(qǐng)求失敗。
我們?cè)賮砜纯次覀冋?qǐng)求的結(jié)果是什么禽笑,我們輸入r.text入录,發(fā)現(xiàn)返回值是亂碼蛤奥。
這是什么原因呢佳镜?
想象一個(gè)場景,假設(shè)你完全不懂英語凡桥,一個(gè)人對(duì)你說“Good night”蟀伸,你是不是會(huì)把這句話解析成“姑奶奶”(這是武林外傳小貝穿越的場景),這就是驢頭不對(duì)馬嘴了缅刽,用中文解析英文固然如此“√停現(xiàn)實(shí)世界有不同的語言,計(jì)算機(jī)世界也有不同的語言衰猛,我們叫它為編碼方式迟蜜,常見編碼方式有:ASCII編碼、GBK編碼啡省、UTF-8編碼娜睛。
我們采用reqeusts庫請(qǐng)求數(shù)據(jù)的時(shí)候髓霞,默認(rèn)encoding是ISO-8859-1。但我們?cè)诓榭础癛esponse”畦戒,在<head>標(biāo)簽中的<meta>標(biāo)簽中方库,有一個(gè)“charset=’utf-8’”,即網(wǎng)站的編碼方式是utf-8障斋。我們用ISO-8859-1解碼utf-8纵潦,肯定會(huì)出現(xiàn)亂碼。
apparent_encoding會(huì)從網(wǎng)頁的內(nèi)容中分析網(wǎng)頁編碼的方式垃环,當(dāng)網(wǎng)頁出現(xiàn)亂碼時(shí)可以把a(bǔ)pparent_encoding的編碼格式賦值給encoding邀层。此時(shí)我們?cè)倏磖.text,發(fā)現(xiàn)沒有亂碼了遂庄。
代碼如下:
import requests
from bs4 import BeautifulSoup
from docx import Document
#1被济、請(qǐng)求數(shù)據(jù)
url='https://www.casc.org.cn/qykjzzjd/'
r=requests.get(url)
r.encoding=r.apparent_encoding
第三步 解析數(shù)據(jù)
我們采用BeautifulSoup庫來解析數(shù)據(jù)。
通過檢查網(wǎng)頁涧团,我們發(fā)現(xiàn)所有企業(yè)會(huì)計(jì)準(zhǔn)則解讀存儲(chǔ)在class="newsConclearfix"的<div>標(biāo)簽下只磷,每行企業(yè)會(huì)計(jì)準(zhǔn)則解讀存儲(chǔ)在上述標(biāo)簽的’li’標(biāo)簽下,在該標(biāo)簽下我們可獲取子鏈接泌绣。
獲取子鏈接后钮追,如下圖所示,我們發(fā)現(xiàn)企業(yè)會(huì)計(jì)準(zhǔn)則解讀的具體信息存儲(chǔ)子鏈接的class="pageInfo"的<div>標(biāo)簽下阿迈,其中標(biāo)題存儲(chǔ)在<h1>標(biāo)簽中元媚,標(biāo)題下的備注存儲(chǔ)在class="pageInfoLittle"的<div>標(biāo)簽中,正文段落存儲(chǔ)在class="infoCon"的<div>標(biāo)簽中苗沧。
代碼如下:
#2刊棕、解析數(shù)據(jù)
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')#獲取子頁面網(wǎng)址
r2=requests.get(url2)#請(qǐng)求子頁面數(shù)據(jù)
r2.encoding=r2.apparent_encoding
soup2=BeautifulSoup(r2.text,'html.parser')#解析子頁面數(shù)據(jù)
content=soup2.find('div',class_="pageInfo")#獲取子頁面數(shù)據(jù)
title=content.h1.text#獲取子頁面標(biāo)題
info=content.find('div',class_="pageInfoLittle").text#獲取子頁面標(biāo)題下備注
paragraph=content.find('div',class_="infoCon").text#獲取子頁面正文
第四步 存儲(chǔ)數(shù)據(jù)
我們想把網(wǎng)頁內(nèi)容存儲(chǔ)成文檔,這就需要docx庫待逞。
1甥角、docx庫的安裝
錯(cuò)誤方法(不要嘗試,不要嘗試识樱,不要嘗試`臀蕖)
這是我踩過的坑。
通過Anaconda的Anaconda Prompt命令窗口安裝docx怜庸,輸入一下指令:
pip install docx
命令窗口顯示成功后当犯,在開發(fā)環(huán)境中輸入import docx測試三方庫有沒有成功,顯示
Import Error: No module named 'exceptions'
原因是通過命令行下載的docx安裝包還沒有完全兼容python3割疾,因此需要自己找一個(gè)兼容的包進(jìn)行安裝嚎卫。
正確方法
(1)下載docx庫的whl文件。
下載地址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/
在以上網(wǎng)址中點(diǎn)擊
python_docx?0.8.10?py2.py3?none?any.whl進(jìn)行下載
(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庫的使用——以企業(yè)會(huì)計(jì)準(zhǔn)則解讀的保存為例
(1)引入docx庫
from docx import Document
(2)創(chuàng)建文檔對(duì)象
doc=Document()
(3)文檔編輯
doc.add_heading(title)#添加標(biāo)題
doc.add_paragraph(info)#添加段落
doc.add_paragraph(paragraph)#添加段落
(4)文檔保存
doc.save('企業(yè)會(huì)計(jì)準(zhǔn)則解讀.docx')#保存文檔
全套代碼:
import requests
from bs4 import BeautifulSoup
from docx import Document
#1、請(qǐng)求數(shù)據(jù)
url='https://www.casc.org.cn/qykjzzjd/'
r=requests.get(url)
r.encoding=r.apparent_encoding
#2胚宦、解析數(shù)據(jù)
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')#獲取子頁面網(wǎng)址
r2=requests.get(url2)#請(qǐng)求子頁面數(shù)據(jù)
r2.encoding=r2.apparent_encoding
soup2=BeautifulSoup(r2.text,'html.parser')#解析子頁面數(shù)據(jù)
content=soup2.find('div',class_="pageInfo")#獲取子頁面數(shù)據(jù)
title=content.h1.text#獲取子頁面標(biāo)題
info=content.find('div',class_="pageInfoLittle").text#獲取子頁面標(biāo)題下備注
paragraph=content.find('div',class_="infoCon").text#獲取子頁面正文
#3首有、保存數(shù)據(jù)
doc.add_heading(title) #添加標(biāo)題
doc.add_paragraph(info) #添加段落
doc.add_paragraph(paragraph) #添加段落
doc.save('企業(yè)會(huì)計(jì)準(zhǔn)則解讀.docx') #保存文檔
**結(jié)果如下:**
![image](https://upload-images.jianshu.io/upload_images/27224266-a478d5fdd60b16e9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)