爬蟲這么火蹄衷,只會(huì)vba怎么辦忧额?那就用vba啊

現(xiàn)在爬蟲這么火厘肮,尤其是用python和R來(lái)實(shí)現(xiàn),但是對(duì)于不是專業(yè)編程人員睦番,平時(shí)接觸過(guò)的語(yǔ)言就只是依賴于office的vba类茂,而我們需要的數(shù)據(jù)又是來(lái)源于網(wǎng)絡(luò),那該怎么辦呢托嚣?其實(shí)vba也可以辦到爬蟲大部分的網(wǎng)頁(yè)數(shù)據(jù)巩检。那么我們就來(lái)看下應(yīng)該怎么去寫

在看下面的內(nèi)容之前,建議先看下VBA與網(wǎng)抓示启,VBA抓取網(wǎng)頁(yè)數(shù)據(jù)XMLHTTP對(duì)象

需求:將電影名兢哭,主演,上映時(shí)間夫嗓,國(guó)家迟螺,評(píng)分等5個(gè)信息給提取下來(lái)

1.先寫出基本架構(gòu)

Sub maoyanTop100() 
Url = "http://maoyan.com/board/4?offset=0" '貓眼電影top100網(wǎng)址 
Set oHttp = CreateObject("MSXML2.ServerXMLHTTP") '創(chuàng)建一個(gè)xmlhttp對(duì)象 
Set oDom = CreateObject("htmlfile") '創(chuàng)建一個(gè)Dom對(duì)象 'XmlHttp對(duì)象(MSXML2.XMLHTTP)向http服務(wù)器發(fā)送請(qǐng)求并使用微軟XML文檔對(duì)象模型Microsoft? XML Document Object Model (DOM)處理回應(yīng)贡避。 
With oHttp 'open橱鹏,創(chuàng)建一個(gè)新的http請(qǐng)求烘绽,并指定此請(qǐng)求的方法蛀蜜、URL以及驗(yàn)證信息(用戶名/密碼) 'send,發(fā)送請(qǐng)求到http服務(wù)器并接收回應(yīng) 
    .Open "GET", Url, False '使用Open方法仅仆,用get請(qǐng)求成畦,F(xiàn)alse代表非異步加載 
    .send '將open方法的信息發(fā)送給網(wǎng)頁(yè)服務(wù)器
     oDom.body.innerHtml = .responseText '將響應(yīng)網(wǎng)頁(yè)的HTML賦值給Dom對(duì)象硬纤,并只需要body標(biāo)簽里面的內(nèi)容 
End With
End Sub

2.接下來(lái)我們要將oDom里面的信息給提取出來(lái)

貓眼電影top100首頁(yè)

通過(guò)對(duì)網(wǎng)頁(yè)源代碼的分析敞峭,可以發(fā)現(xiàn),每部電影的信息隱藏在<dd>...</dd>這個(gè)標(biāo)簽里的

接下來(lái)我們就可以這樣子寫

Sub maoyanTop100() 
Url = "http://maoyan.com/board/4?offset=0" '貓眼電影top100網(wǎng)址 
Set oHttp = CreateObject("MSXML2.ServerXMLHTTP") '創(chuàng)建一個(gè)xmlhttp對(duì)象 
Set oDom = CreateObject("htmlfile") '創(chuàng)建一個(gè)Dom對(duì)象 

'XmlHttp對(duì)象(MSXML2.XMLHTTP)向http服務(wù)器發(fā)送請(qǐng)求并使用微軟XML文檔對(duì)象模型Microsoft? XML Document Object Model (DOM)處理回應(yīng)球订。 

With oHttp 
'open后裸,創(chuàng)建一個(gè)新的http請(qǐng)求,并指定此請(qǐng)求的方法冒滩、URL以及驗(yàn)證信息(用戶名/密碼) 'send,發(fā)送請(qǐng)求到http服務(wù)器并接收回應(yīng) .Open "GET", Url, False '使用Open方法轻抱,用get請(qǐng)求,F(xiàn)alse代表非異步加載 

    .send '將open方法的信息發(fā)送給網(wǎng)頁(yè)服務(wù)器 
     oDom.body.innerHtml = .responseText '將響應(yīng)網(wǎng)頁(yè)的HTML賦值給Dom對(duì)象旦部,并只需要body標(biāo)簽里面的內(nèi)容 
End With 
i = 2
For Each Item In oDom.all 
  If Item.tagname = "DD" Then 
    Range("a" & i) = Item.Children(1).getAttribute("title") '電影名信息 
    Range("b" & i) =Item.Children(2).Children(0).Children(0).Children(1).innerText '主演 
    Range("c" & i) = Item.Children(2).Children(0).Children(0).Children(2).innerText '上映時(shí)間和國(guó)家 
    Range("d" & i) = Item.Children(2).Children(0).Children(1).Children(0).innerText '評(píng)分 
    i = i + 1 
  End If 
Next
End Sub

通過(guò)上面的代碼祈搜,就可以將一頁(yè)的所有電影信息都給爬取下來(lái),但是我們要爬取的是100個(gè)電影士八,我們必須將其他網(wǎng)頁(yè)的信息也可提取下來(lái)容燕,通過(guò)對(duì)網(wǎng)頁(yè)鏈接的觀察,我們發(fā)現(xiàn)婚度,網(wǎng)頁(yè)是這樣一個(gè)規(guī)律:

所以蘸秘,我們可以通過(guò)循環(huán)將所有頁(yè)面的鏈接循環(huán)一遍,得到最終的代碼:

Sub maoyanTop100() 
i = 2 
For n = 0 To 9 
  Url = "http://maoyan.com/board/4?offset=" & n * 10 
  Set oHttp = CreateObject("MSXML2.ServerXMLHTTP") 
  Set oDom = CreateObject("htmlfile") 
  With oHttp 
    .Open "GET", Url, False 
    .send 
    oDom.body.innerHtml = .responseText 
  End With 
  For Each Item In oDom.all 
    If Item.tagname = "DD" Then 
    Range("a" & i) = Item.Children(1).getAttribute("title") 
    Range("b" & i) = Item.Children(2).Children(0).Children(0).Children(1).innerText 
    Range("c" & i) = Item.Children(2).Children(0).Children(0).Children(2).innerText 
    Range("d" & i) = Item.Children(2).Children(0).Children(1).Children(0).innerText 
    i = i + 1 
  End If 
  Next 
Next n 
MsgBox "Done 蝗茁!"
End Sub
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末醋虏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哮翘,更是在濱河造成了極大的恐慌颈嚼,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饭寺,死亡現(xiàn)場(chǎng)離奇詭異阻课,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)艰匙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門限煞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人员凝,你說(shuō)我怎么就攤上這事署驻。” “怎么了健霹?”我有些...
    開(kāi)封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵旺上,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我骤公,道長(zhǎng)抚官,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任阶捆,我火速辦了婚禮凌节,結(jié)果婚禮上钦听,老公的妹妹穿的比我還像新娘。我一直安慰自己倍奢,他們只是感情好朴上,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著卒煞,像睡著了一般痪宰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上畔裕,一...
    開(kāi)封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天衣撬,我揣著相機(jī)與錄音,去河邊找鬼扮饶。 笑死具练,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甜无。 我是一名探鬼主播扛点,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼岂丘!你這毒婦竟也來(lái)了陵究?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奥帘,失蹤者是張志新(化名)和其女友劉穎铜邮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體翩概,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牲距,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年返咱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钥庇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咖摹,死狀恐怖评姨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萤晴,我是刑警寧澤吐句,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站店读,受9級(jí)特大地震影響嗦枢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屯断,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一文虏、第九天 我趴在偏房一處隱蔽的房頂上張望侣诺。 院中可真熱鬧,春花似錦氧秘、人聲如沸年鸳。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)搔确。三九已至,卻和暖如春灭忠,著一層夾襖步出監(jiān)牢的瞬間膳算,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工弛作, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畦幢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓缆蝉,卻偏偏與公主長(zhǎng)得像宇葱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刊头,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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