Board logo

標題: [發問] 如何寫excel VBA去抓取網頁原始碼內的特定文字 [打印本頁]

作者: daniel1326    時間: 2013-3-1 17:29     標題: 如何寫excel VBA去抓取網頁原始碼內的特定文字

小弟正在用excel整理英文單字的發音資料, 需要手動輸入一個單字到英文單字網頁 http://dictionary.reference.com/,搜尋之後再開啟該網頁的原始碼內容,去尋找.MP3檔的語音編號後,依序複製貼回excel的mp3語音編號欄位的儲存格,若是想要寫一個VBA程式,自動讀出單字欄位下的所有單字,貼回原始檔內的mp3編號,(如貼圖說明),代替用手動一個一個抓取英文字典網站的原始碼內的MP3編號,不知該如何寫?
有請高手們指點!單字表格如以下貼圖.
[attach]14281[/attach]
[attach]14283[/attach]
作者: daniel1326    時間: 2013-3-1 17:35

不好意思,看不到貼圖,再貼一次[attach]14284[/attach]
作者: GBKEE    時間: 2013-3-2 08:49

回復 2# daniel1326
  1. Option Explicit
  2. Function Mp3(Word As String) As String
  3.     Dim Url As String, Ar
  4.     Url = "http://dictionary.reference.com/browse/" & Word & "?s=b"
  5.     If Word = "" Then Mp3 = "??": Exit Function
  6.     With CreateObject("Microsoft.XMLHTTP")
  7.         .Open "get", Url, False
  8.        .send     
  9.         Ar = Split(Split(UCase(.responseText), ".MP3")(1), "/")
  10.         Mp3 = Ar(UBound(Ar))
  11.    End With
  12. End Function
複製代碼
[attach]14285[/attach]
作者: ui123    時間: 2017-9-10 20:15

回復 3# GBKEE

超級版主大大,我用你的方法試了一個禮拜,但還是抓不到 view-source:https://finance.yahoo.com/quote/AAPL?p=AAPL 中的 CrumbStore":{"crumb":"9ZYeo7D3CrT"}  紅色字會不定時變,所以我想用VBA去自動抓它, 但一直失敗,好奇怪喔∼
作者: ui123    時間: 2017-9-11 06:38

"CrumbStore":{"crumb":" 我有定義出CrumbStart,但好像是原始碼太多,以至於無法塞進 Dim String 大小而搜尋不到我要定義的CrumbStart ?
  CrumbStart = Chr(34) & "CrumbStore" & Chr(34) & ":{" & Chr(34) & "crumb" & Chr(34) & ":" & Chr(34)
作者: GBKEE    時間: 2017-9-11 08:35

回復 5# ui123
請說明:抓這網頁哪裡的資料
  1. Option Explicit
  2. 'Sub Ex()
  3.     Dim Url As String, AR
  4.     Url = "https://finance.yahoo.com/quote/AAPL?p=AAPL"
  5.     With CreateObject("Microsoft.XMLHTTP")
  6.         .Open "get", Url, False
  7.        .send
  8.         If InStr(.responseText, "CrumbStore"":{""crumb"":""") = False Then MsgBox "找不到啊"
  9.         
  10.    End With
  11. End Sub
複製代碼

作者: ui123    時間: 2017-9-11 10:28

回復 6# GBKEE

超級版大,我想抓的是紅框部分,那一個每隔一段時間就會改變,
而網頁原始碼 CrumbStore":{"crumb":" 只會出現一次,所以我用這去定位

    javascript:;
作者: ui123    時間: 2017-9-11 10:38

回復 6# GBKEE

很奇怪的是,網頁原始檔明明有"CrumbStore":{"crumb":"  ,但是用程式InStr(.responseText, "CrumbStore"":{""crumb"":""") 卻搜尋不到,
想說是網頁原始檔太大所以.responseText 放不下,又或者是其他問題
作者: ui123    時間: 2017-9-11 17:32

回復 6# GBKEE
大大,我試了很久不行(下面語法是 Java 語言,不知道有沒有關),如果真不行就算了∼
謝囉∼
作者: GBKEE    時間: 2017-9-13 08:36

回復 9# ui123
Java 語言尚未入門,幫不上忙
只抓到100筆資料
  1. Sub Ex()
  2.     Dim oXmlhttp As Object, oHtmldoc As Object, surl, r, c, E
  3.     Set oXmlhttp = CreateObject("msxml2.xmlhttp")
  4.     Set oHtmldoc = CreateObject("htmlfile")
  5.     surl = "https://finance.yahoo.com/quote/AAPL/history?period1=1473638400&period2=1505174400&interval=1d&filter=history&frequency=1d"
  6.     With oXmlhttp
  7.         .Open "Get", surl, False
  8.         .Send
  9.         oHtmldoc.write .responseText
  10.     End With
  11.      With oHtmldoc
  12.         Set E = .all.tags("table")(3)
  13.         ActiveSheet.Cells.Clear
  14.         For r = 0 To E.Rows.Length - 1
  15.             For c = 0 To E.Rows(r).Cells.Length - 1
  16.                 Cells(r + 1, c + 1) = E.Rows(r).Cells(c).innertext
  17.             Next
  18.         Next
  19.     End With
  20.     Set oXmlhttp = Nothing
  21.     Set oHtmldoc = Nothing
  22. End Sub
複製代碼

作者: ui123    時間: 2017-9-13 12:24

回復 10# GBKEE

GBKEE大大,感恩~
我也是只抓到100筆就抓不了了,目前還在想兩種(link or download csv)辦法如何解




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)