爬蟲小項目之三 學術(shù)文獻爬蟲+詞云(上)

八月已經(jīng)過了一半,答辯完之后膘侮,sci小論文也剛寫完屈糊,今天難得休息。今天就來填上個月的坑琼了,power bi做文獻爬蟲逻锐。這里先解釋一下原理,首先使用學術(shù)搜索引擎搜索關鍵詞雕薪,然后翻頁下載所有的標題昧诱,作者,出版年份所袁,引用次數(shù)盏档,最后將下載完的數(shù)據(jù)用powerquery清洗,powerpivot建模燥爷,powerview可視化蜈亩。詞云的制作使用的是powerbi的可視化插件完成的,非常簡單前翎。另外稚配,為了從詞云中剔除非關鍵詞,我使用了一個stopwordlist港华。大概就是這么多道川。先展示一下我的作品,以CAR T作為關鍵詞檢索bing學術(shù):

https://app.powerbi.com/view?r=eyJrIjoiOTE4ZWMwNzMtODZhNi00NTBiLWE0NDctNmFiNDUzODk1ZWI5IiwidCI6ImUyZmFkYTNhLWZiNjktNGJkZS1hZmE4LWNlM2M2YWU2YjkyYiIsImMiOjZ9

值得一提的是powerbi制作的整個模型最后會保存為一個流程立宜,這樣只要換一個關鍵詞再回車一下就可以更新整個流程冒萄。是不是很方便很刺激?唯一的限制就是蝸牛一般的網(wǎng)速赘理。

為了方便理解宦言,我把整個流程分為兩部分:第一部分,講網(wǎng)頁爬取商模,難點是翻頁爬取和二級鏈接爬取奠旺。第二部分蜘澜,講powerquery數(shù)據(jù)清洗和powerpivot數(shù)據(jù)建模。這里要用一點powerquery M語言和powerpivot DAX語言的知識响疚,一點點就行鄙信。

OK廢話不多講,馬上開始干活忿晕!


第一部分power bi爬蟲

理論和軟件安裝的東西自己找資料看装诡,我就直接上操作了。

Step 1 找網(wǎng)頁鏈接規(guī)律

打開百度學術(shù)践盼,搜索關鍵詞:CAR T


我主要想拿的其實是網(wǎng)址:

https://xueshu.baidu.com/s?wd=Car+T&tn=SE_baiduxueshu_c1gjeupa&cl=3&ie=utf-8&bs=CAR+T&f=8&rsv_bp=1&rsv_sug2=0&sc_f_para=sc_tasktype%3D%7BfirstSimpleSearch%7D看到?jīng)]鸦采,這個鏈接就是把檢索的關鍵詞用是s?wd=CAR+T的語法鏈接起來了。但是翻頁的信息沒有找到咕幻,所以要翻個頁看渔伯。點到第二頁,鏈接是這樣的:

https://xueshu.baidu.com/s?wd=Car%20T&pn=10&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8&sc_f_para=sc_tasktype%3D%7BfirstSimpleSearch%7D&sc_hit=1

這是第二頁肄程,但是pn=10锣吼,這說明啥?每頁有10個文章蓝厌,第二頁就是從11開始了玄叠。知道這個規(guī)律就可以翻頁爬取了。

Step 2 網(wǎng)頁爬取

打開powerbi拓提,選擇獲取數(shù)據(jù)->web->粘貼網(wǎng)址->確定->連接读恃,選擇表1。這張表格包含了標題崎苗、引用次數(shù)狐粱、刊出時間、雜志名稱胆数,還有一些其他我不關心的信息。


選擇轉(zhuǎn)換數(shù)據(jù)互墓,就可以將數(shù)據(jù)導入到powerquery中必尼,修改列名,刪除其他不重要的信息篡撵。


到這里判莉,需要根據(jù)前面的步驟創(chuàng)建一個函數(shù)。首先創(chuàng)建一個頁碼參數(shù)


然后育谬,在“源”這個文件下修改函數(shù)命令

=Web.BrowserContents("https://xueshu.baidu.com/s?wd=Car%20T&pn=" & Text.From(Page) & "&tn=SE_baiduxueshu_c1gjeupa&ie=utf-8&sc_f_para=sc_tasktype%3D%7BfirstSimpleSearch%7D&sc_hit=1")

綠色的文本Page就是剛才的參數(shù)券盅,Text.From(Page) 將Page轉(zhuǎn)換為文本,&是連字符膛檀。這樣整個流程就是一個根據(jù)Page抓取頁面并清理文本的函數(shù)了锰镀。接下來娘侍,將這個流程生成一個以Page為參數(shù)的函數(shù):


創(chuàng)建名為GetHtml的函數(shù)。這個函數(shù)可以這樣表示Result=GetHtml(Page),Result就是我們抓取的數(shù)據(jù)了泳炉。

有了GetHtml函數(shù)憾筏,下一步需要一個頁碼list,來翻頁抓取花鹅。生成頁碼list很簡單氧腰,新建一個空查詢命名為PageList,然后使用M函數(shù)生成List刨肃,就OK啦古拴!


下面就是使用M函數(shù)調(diào)用GetHtml對PageList進行遍歷,然后合并矩陣就OK啦真友!

先創(chuàng)建一個空查詢斤富,命名為result,在使用M語言

=List.Transform ( PageList , each GetHtml (_ ) )

(注釋:List.Transform類似于for循環(huán)锻狗,_ 類似于迭代參數(shù)满力。)

OK,我翻了10頁轻纪,要等下載數(shù)據(jù)油额,等數(shù)據(jù)下載完成就可以得到一個Table的List


下面就是將List合并就可以了,這里使用Table.Combine函數(shù)刻帚。

= Table.Combine(? List.Transform(PageList,each GetHtml(_))? )

合并之后最后的結(jié)果就出來了潦嘶!


坑爹的百度雜志不用全名,解決這個問題可以用二級爬取崇众,這個下次講掂僵。

好了,到了這一步顷歌,就下載好了所有的锰蓬。。眯漩。等等芹扭,我發(fā)現(xiàn)雜志名竟然還有數(shù)字!好了赦抖,我真的生氣了舱卡!那么就不得不祭出二級爬取了~~~~~~~~xxx!6佑B肿丁!

二級爬取是根據(jù)文章的連接找到這個界面:


呵呵~要尔,還有學校的小圖標舍杜,看起來真可愛新娜!從這個頁面提取標題,作者蝴簇,引用量杯活,雜志名。


好了熬词,正式開始干活旁钧!首先,要從一級爬取頁面提取鏈接互拾。只用修改前面的操作步驟就可以啦歪今!


OK,到這里颜矿,我們又要生成一個函數(shù)了寄猩,這個函數(shù)的主要功能就是從web中提取標題、引用次數(shù)骑疆、發(fā)表時間田篇、雜志名。

我們首先新建一個參數(shù)箍铭,二級web地址


然后新建源泊柬,選擇Web,基本诈火,將輸入改為參數(shù)SubWebLink兽赁,確定



提取信息:



然后創(chuàng)建函數(shù),重命名為SubHtmlGet冷守。這個函數(shù)的參數(shù)是SubWebLink, 作用是從二級界面中提取我們想要的信息刀崖。


OK,函數(shù)準備好了拍摇,就可以開始瘋狂爬數(shù)據(jù)了亮钦。


在Result表的link列表加上前綴http:,再使用SubHtmlGet函數(shù)提取信息授翻。公式是:

=Table.TransformColumns( Table.Combine(? List.Transform(PageList,each GetHtml(_))? ),{"Link", eachSubHtmlGet("http:"&_)?? }?? )

使用Table.TransformColumns函數(shù)對Link字段進行轉(zhuǎn)化或悲。然后就是等結(jié)果了,不想用二級爬取就是因為要等太久了~_~! 而且這PowerBI的web引擎不支持多線程和多進程~不過可以用內(nèi)置的Python腳本進行間接爬取~有機會寫個技術(shù)貼堪唐,嘿嘿!

等了1-2分鐘翎蹈,爬了100個網(wǎng)頁淮菠,結(jié)果就出來了!


展開這個Table就是我們想要的數(shù)據(jù)了


嘿嘿荤堪。合陵。就是有些雜志后面跟了年份枢赔,也有空的∮抵空數(shù)據(jù)可以保留踏拜,時間數(shù)據(jù)可以刪除掉,很簡單低剔,有兩種方法速梗,拆分列和直接remove。這里我用split襟齿,這樣制作流程不容易出錯



另外姻锁,還需要在每個list中添加stopwords,這個比較容易猜欺。首先導入數(shù)據(jù)位隶,就是這樣:


然后使用語法:

let

??? 源 =

Table.FromColumns({Lines.FromBinary(File.Contents("C:\Users\Administrator\Desktop\PowerBI\文獻挖掘\stopwordslist.txt"),null, null, 1252)}),

??? 刪除的間隔行 =

Text.Combine(Table.ToList(Table.AlternateRows(源,1,1,1)),",")

in

刪除的間隔行

這樣WordList就變成了這樣了:


將這個添加到Result后面:


這樣數(shù)據(jù)就準備好了,上載在POWERBI开皿,接下來就是使用DAX語言進行建模了涧黄。

首先我們要隱藏其中幾張不用的表,我們只用Result表:


感覺寫得有點兒長了赋荆,寫這個竟然用了我3個小時的寶貴時間笋妥,心疼!等我有空再寫DAX建模和可視化部分糠睡!下次更新再見贴浙!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幔崖,隨后出現(xiàn)的幾起案子奴迅,更是在濱河造成了極大的恐慌,老刑警劉巖均抽,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫁赏,死亡現(xiàn)場離奇詭異,居然都是意外死亡油挥,警方通過查閱死者的電腦和手機潦蝇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來深寥,“玉大人攘乒,你說我怎么就攤上這事⊥锒欤” “怎么了则酝?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闰集。 經(jīng)常有香客問我沽讹,道長般卑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任爽雄,我火速辦了婚禮蝠检,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挚瘟。我一直安慰自己叹谁,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布刽沾。 她就那樣靜靜地躺著本慕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪侧漓。 梳的紋絲不亂的頭發(fā)上锅尘,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音布蔗,去河邊找鬼藤违。 笑死,一個胖子當著我的面吹牛纵揍,可吹牛的內(nèi)容都是我干的顿乒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼泽谨,長吁一口氣:“原來是場噩夢啊……” “哼璧榄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吧雹,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤骨杂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雄卷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搓蚪,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年丁鹉,在試婚紗的時候發(fā)現(xiàn)自己被綠了妒潭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡揣钦,死狀恐怖雳灾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冯凹,我是刑警寧澤佑女,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站谈竿,受9級特大地震影響团驱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜空凸,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一嚎花、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呀洲,春花似錦紊选、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至滓窍,卻和暖如春卖词,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吏夯。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工此蜈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人噪生。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓裆赵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親跺嗽。 傳聞我的和親對象是個殘疾皇子战授,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345