python數(shù)據(jù)分析前奏:中國教育近30年來官方所有的通知政策文件大數(shù)據(jù)的爬取與下載

一摇幻、概述

一般情況下垒迂,一套完整的數(shù)據(jù)分析的主要過程是:

  1. 需求分析
  2. 數(shù)據(jù)獲取
  3. 數(shù)據(jù)清洗
  4. 數(shù)據(jù)分析的邏輯構建
  5. 可視化
  6. 報告撰寫
  7. 總結反思

很多時間牵舵,公司的數(shù)據(jù)是從網(wǎng)站后臺直接導出給數(shù)據(jù)分析師堂污。但是在某些情況下家肯,數(shù)據(jù)并不能從后臺直接獲取,或者只能從別的公司的網(wǎng)站獲取盟猖,這時候數(shù)據(jù)分析師不光需要掌握數(shù)據(jù)分析的邏輯讨衣,還需要掌握一定的數(shù)據(jù)獲取能力,最便捷的數(shù)據(jù)獲取方式就是python爬蟲式镐。
本文內(nèi)容:
本文主要爬取并下載教育部從1981年至今發(fā)布的所有通知反镇、公告、政策文件娘汞,進而通過數(shù)據(jù)分析來呈現(xiàn)中國近30年的教育發(fā)展及未來走向歹茶。

二、運行環(huán)境

  • python3.7
  • win10或mac
  • pycharm (一款好用的IDE)
  • 所需要的python庫:
    (1) requests: python中較為基礎的爬蟲庫你弦,多數(shù)情況用于獲取網(wǎng)頁信息,具體學習移步:
    requests官方教程
    (2) PyQuery:一個好用的解析庫惊豺,用來定位你所需要的信息在網(wǎng)頁中的位置。具體學習移步:
    PyQuery官方教程
    (3) pandas:python數(shù)據(jù)分析中最常用的庫禽作,功能異常強大尸昧。
    具體學習移步:
    pandas官方教程
    (4) json:讀取json文件的庫(python默認已安裝)
    (5) xlwt:讀取excel文件的庫(讀取excel報庫缺失錯誤時手動安裝)
    具體的安裝直接在cmd或者終端中輸入:
    pip(或pip3) install 庫命,例如
    pip install requests
    注:也可以直接使用現(xiàn)成的一些python爬蟲輪子领迈,例如強大的Scrapy(本文不做介紹)

三彻磁、爬蟲過程

1. 在程序中導入所需的庫:

import requests   # 導入requests
from pyquery import PyQuery as pq   # 導入PyQuery
import time
import pandas as pd
import json
import xlwt

2. 構造爬蟲的headers

顧名思義,就是一些爬蟲的偽裝狸捅,需要向瀏覽器提交的數(shù)據(jù)等衷蜓,統(tǒng)一放入headers中。
User-Agent 后面是跟的瀏覽器的偽裝尘喝,由于服務器一般拒絕爬蟲爬取磁浇,因為會造成服務器壓力,因此一般都需要偽裝

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}

3. 一些變量賦值朽褪,如網(wǎng)站的地址置吓,輸出文件的名字

url_base1 = 'http://www.moe.gov.cn/was5/web/search?channelid=258518&searchword=&page='
# 網(wǎng)站的部分ID地址,page=的后面是頁碼的數(shù)缔赠,在之后的循環(huán)中使用
file_name = 'Policy.cvs'

4. 爬蟲邏輯及網(wǎng)站預分析

在Chrome瀏覽器打開地址:
http://www.moe.gov.cn/was5/web/search?channelid=258518&searchword=&page=1
右鍵 “檢查” 衍锚,如圖:

源網(wǎng)頁代碼.png

需要爬取并下載的內(nèi)容:
(1)文章標題
(2)發(fā)布時間
檢查源代碼發(fā)現(xiàn)一些標題由于過長而只顯示了部分,后面是...嗤堰,這就需要進入二級的網(wǎng)站戴质,再從二級網(wǎng)站獲取標題。如圖
二級網(wǎng)頁.png

有了這些,那么具體的爬蟲過程也就很清楚了:
(1)首先告匠,進入第一頁
(2)獲取一個標題的鏈接與時間戈抄,時間直接存儲,用鏈接打開二級網(wǎng)站
(3)在二級網(wǎng)站獲取標題
(4)重復(2)(3)后专,直到這一頁中的題目與時間全部存儲完畢
(5)轉入第二頁
(6)重復(2)(3)(4)遍歷這一頁中的題目與時間
(7)轉入第三頁.......之后就是程序的循環(huán)了

5. 具體代碼爬取過程

  • 定義爬取一頁的函數(shù)以便在后續(xù)程序中調(diào)用
def get_one_page(url):
    try:
        response = requests.get(url, headers=headers)   # 用requests獲取網(wǎng)站代碼
        response.encoding = response.apparent_encoding 
        #提前設置encoding划鸽,避免后續(xù)解析亂碼問題
        content = response.text   
        # 將獲取的代碼內(nèi)容,也就是text屬性直接給content
        print('進入頁面成功')
        doc = pq(content)   
        # 將網(wǎng)頁文字代碼戚哎,也就是content賦值給doc裸诽,其類型為PyQuery
        for item in doc('.gongkai_wenjian ul li').items():   
        # 定位要爬取題目的超鏈接
            date = item('span').text()
            # 獲取發(fā)文日期
            response_title = requests.get(item('a').attr('href'),headers=headers)
            # 重新用requests庫打開這個超鏈接并獲取網(wǎng)頁代碼
            response_title.encoding = response_title.apparent_encoding
            content_title = response_title.text
            doc_title = pq(content_title)
            title = doc_title('h1').text().replace('\n','')
            # 定位二級網(wǎng)站標題位置并返回給title
            Policy = (
                item('a').attr('href'),
                title,
                date
            )
            # 定義一個元組,包含鏈接型凳、題目與日期
            print(Policy)
            write_to_file(Policy)
            # 用write_to_file()函數(shù)將其存儲起來崭捍,后面進行函數(shù)定義
    except Exception as e:
        print('Error', e.args)
  • 定義write_to_file()函數(shù),補上上一個函數(shù)的坑
def write_to_file(content):
    with open(file_name, 'a', encoding='utf-8') as f:
       f.write(content[0]+','+content[1]+','+content[2]+'\n')
# 存儲為.cvs文件啰脚,之后再輸出為excel
  • 定義一個輸出excel文件的函數(shù):
def creat_excel(file_name):
    df = pd.DataFrame(pd.read_csv(file_name, encoding='utf-8', names=['Url', 'Title','date']))
    df.drop_duplicates(subset='Url', keep='last', inplace=True)
  # 舍去重復的標題殷蛇,保留最后一個
    df.to_excel('Policy_qingdao.xlsx')
  • 有了以上三個函數(shù),就可以定義主函數(shù)了:
def main():
    for i in range(1,680):
    # 獲取1到680頁的內(nèi)容橄浓。(如果網(wǎng)站有更新頁碼此項也要更新)
        print('即將爬取第'+str(i)+'頁')
        url = url_base1 + str(i)
        get_one_page(url)
        time.sleep(0.1)  # 爬取一頁休眠0.1秒
    creat_excel(file_name)
    # 輸出excel
  • 定義了主函數(shù)粒梦,還需要執(zhí)行:
if __name__ == '__main__':
    main()

至此,程序代碼已完整荸实,直接運行匀们,過10分鐘左右就可以獲取1萬多條信息存在excel中。
下一篇文章將具體分析這一萬多條大數(shù)據(jù)准给;在正式開始之前泄朴,讀者可以閱讀一些基礎知識。數(shù)據(jù)分析環(huán)境搭設以及關于excel文件的讀取與分析可以參考之前的一篇文章:Python 數(shù)據(jù)分析實例:
Pandas分析問卷選擇率

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末露氮,一起剝皮案震驚了整個濱河市祖灰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畔规,老刑警劉巖局扶,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叁扫,居然都是意外死亡三妈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門莫绣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畴蒲,“玉大人,你說我怎么就攤上這事对室∧T铮” “怎么了狞玛?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涧窒。 經(jīng)常有香客問我,道長锭亏,這世上最難降的妖魔是什么纠吴? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮慧瘤,結果婚禮上戴已,老公的妹妹穿的比我還像新娘。我一直安慰自己锅减,他們只是感情好糖儡,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怔匣,像睡著了一般握联。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上每瞒,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天金闽,我揣著相機與錄音,去河邊找鬼剿骨。 笑死代芜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的浓利。 我是一名探鬼主播挤庇,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贷掖!你這毒婦竟也來了嫡秕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤苹威,失蹤者是張志新(化名)和其女友劉穎淘菩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屠升,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡潮改,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了腹暖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汇在。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脏答,靈堂內(nèi)的尸體忽然破棺而出糕殉,到底是詐尸還是另有隱情亩鬼,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布阿蝶,位于F島的核電站雳锋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏羡洁。R本人自食惡果不足惜玷过,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筑煮。 院中可真熱鬧辛蚊,春花似錦、人聲如沸真仲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秸应。三九已至虑凛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間软啼,已是汗流浹背卧檐。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焰宣,地道東北人霉囚。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像匕积,于是被迫代替她去往敵國和親盈罐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容