用python(Requests庫(kù))爬取數(shù)據(jù)局行業(yè)報(bào)告的信息

作為一個(gè)剛?cè)腴T對(duì)python極具喜愛的小白盯串,堅(jiān)信實(shí)踐才是掌握工具的唯一道路,所以一直想要用python來做一些項(xiàng)目來輔助提高工作宿饱、生活中的處理一些事情的效率陨溅。

在平時(shí)的工作中壹无,總是難免會(huì)需要搜集各種各樣的行業(yè)研究報(bào)告歼跟,單純從搜索引擎中搜尋下載又是一個(gè)耗費(fèi)時(shí)間和體力的事情。后來發(fā)現(xiàn)一個(gè)神奇良心的網(wǎng)站——數(shù)據(jù)局(http://shujuju.cn)格遭,里面時(shí)常更新一些報(bào)告解決燃眉之急哈街。

這么一個(gè)大寶藏,我決定將其報(bào)告名稱及鏈接爬取下來拒迅,因?yàn)橄螺d需要涉及到登陸骚秦,而登陸遇到了比較棘手的圖片驗(yàn)證的問題,后期將會(huì)針對(duì)報(bào)告本身的進(jìn)行一些分析(下期見~)

其實(shí)整體思路是相當(dāng)?shù)暮?jiǎn)單璧微, 因?yàn)榫W(wǎng)站本身就沒有太多復(fù)雜的地方作箍,思路如下:

  1. 用requests庫(kù)爬取報(bào)告列表頁(yè)第一頁(yè),并通過lxml的etree進(jìn)行頁(yè)面分析獲取到整體的頁(yè)數(shù)
  2. 因?yàn)榉?yè)邏輯只是在 "http://www.shujuju.cn/lecture/detail/"后加上頁(yè)碼數(shù)字前硫,故利用規(guī)律構(gòu)建所有需要爬取的網(wǎng)頁(yè)鏈接
  3. 然后繼續(xù)使用requests和xlml將所有列表頁(yè)中報(bào)告名稱和報(bào)告所在的頁(yè)面鏈接給保留下來
  4. 然后逐一去爬取報(bào)告詳情頁(yè)胞得,文末附錄的報(bào)告鏈接給抓取保存
  5. 最后用csv將所有數(shù)據(jù)保存在本地

完整代碼如下:

#-*- coding: utf-8 -*
import requests
import re
import time
import csv
from lxml import etree

#構(gòu)建header
headers = {
    "Accept": "application/json",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
}

#獲得目前最新的報(bào)告的編號(hào)
url = "http://www.shujuju.cn/lecture/browe"
response = requests.get(url,headers = headers)
datas = etree.HTML(response.text)
print(datas.text)
results = datas.xpath('//div[@class="textdescription-small-info"]/h3/a/@href')
last_report_num = re.search('\d{4}',results[0])
last_report_num = last_report_num[0]

#構(gòu)建報(bào)告的列表
report_page_urls = []
for report_num in range(int(last_report_num)):
    report_page_url = "http://www.shujuju.cn/lecture/detail/"+str(report_num+1)
    report_page_urls.append(report_page_url)

###獲取報(bào)告頁(yè)內(nèi)容

report_info = []

for i in range(int(last_report_num)):
    target_url=report_page_urls[i]
    response = requests.get(target_url,headers = headers)
    page_datas = etree.HTML(response.text)
    #獲取標(biāo)題
    title = page_datas.xpath('//h1[@class="title"]/text()')
    title = title[0]

    #獲取下載鏈接
    report_download_ul = page_datas.xpath('//div[@class="report-article"]/ul/li/a/@href')
    try:
        report_download_ul=report_download_ul[0]
        report_download_ul = "http://www.shujuju.cn"+report_download_ul
    except IndexError:
        print(title + " 報(bào)告頁(yè)面沒有附下載鏈接")
        report_download_ul = ''
    new_report_info = { 'report_title':title,'download_url':report_download_ul,'paga_url':target_url}
    report_info.append(new_report_info)
    print("已處理第"+str(i+1)+'個(gè)頁(yè)面,共'+last_report_num+'個(gè)頁(yè)面')
    time.sleep(1)

# 保存數(shù)據(jù)到csv文件中
with open('E:/report/report.csv','w') as csvfile:
    fieldnames = report_info[1].keys()
    f_csv = csv.DictWriter(csvfile,fieldnames = fieldnames)
    f_csv.writeheader()
    for data in report_info:
        try:
            f_csv.writerow(data)
        except UnicodeEncodeError:
            print('第'+str(data)+'個(gè)報(bào)告的標(biāo)題存在特殊字符,保存失敗')
    print("保存文件成功屹电,處理結(jié)束")


因?yàn)橹型居袃蓚€(gè)問題阶剑,一個(gè)是網(wǎng)頁(yè)中可能介紹了報(bào)告卻沒有附上報(bào)告鏈接跃巡,這種情況下報(bào)告名稱和網(wǎng)頁(yè)鏈接保留下來了,是沒有下載鏈接牧愁;另一個(gè)問題是由于報(bào)告標(biāo)題中存在一些特殊字符素邪,這些字符沒法寫入到CSV中,故暫時(shí)先沒有記錄猪半;

最后的保存下來的結(jié)果如下:

報(bào)告保存結(jié)果列表.png

接下來需要對(duì)這些保存下來的資產(chǎn)進(jìn)行分析利用兔朦,目前正在思考嘗試中,如果覺得有有意思的地方磨确,下次將會(huì)繼續(xù)分享~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沽甥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乏奥,更是在濱河造成了極大的恐慌安接,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件英融,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡歇式,警方通過查閱死者的電腦和手機(jī)驶悟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來材失,“玉大人痕鳍,你說我怎么就攤上這事×蓿” “怎么了笼呆?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)旨别。 經(jīng)常有香客問我诗赌,道長(zhǎng),這世上最難降的妖魔是什么秸弛? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任铭若,我火速辦了婚禮,結(jié)果婚禮上递览,老公的妹妹穿的比我還像新娘叼屠。我一直安慰自己,他們只是感情好绞铃,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布镜雨。 她就那樣靜靜地躺著,像睡著了一般儿捧。 火紅的嫁衣襯著肌膚如雪荚坞。 梳的紋絲不亂的頭發(fā)上挑宠,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音西剥,去河邊找鬼痹栖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瞭空,可吹牛的內(nèi)容都是我干的揪阿。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼咆畏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼南捂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旧找,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤溺健,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后钮蛛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞭缭,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年魏颓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岭辣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甸饱,死狀恐怖沦童,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叹话,我是刑警寧澤偷遗,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站驼壶,受9級(jí)特大地震影響氏豌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜热凹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一箩溃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碌嘀,春花似錦涣旨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春烹棉,著一層夾襖步出監(jiān)牢的瞬間攒霹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工浆洗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留催束,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓伏社,卻偏偏與公主長(zhǎng)得像抠刺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摘昌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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