我試圖從網站上抓取數據:http://uk.investing.com/rates-bonds/financial-futures通過vba,就像實時價格一樣,即德國人5 YR Bobl,美國30Y T-Bond,我試過excel網頁查詢,但它只是刮整個網站,但我只想刮掉費率,有沒有辦法做到這一點?使用vba從網站上刮取數據
回答
有幾種方法可以做到這一點。這是我寫的一個答案,希望在瀏覽關鍵詞「從網站上抓取數據」時能夠找到所有的Internet Explorer自動化基礎知識,但請記住沒有什麼東西值得作爲您自己的研究(如果您不想堅持預先編寫的代碼,您無法自定義)。
請注意,這是單向,我不喜歡在性能方面(因爲它取決於瀏覽器速度),但這是很好理解互聯網自動化背後的基本原理。
1)如果我需要瀏覽網頁,我需要一個瀏覽器!所以我創建一個Internet Explorer瀏覽器:
Dim appIE As Object
Set appIE = CreateObject("internetexplorer.application")
2)我要求瀏覽器瀏覽目標網頁。通過使用「.Visible」屬性,我決定是否想讓瀏覽器執行其工作。當構建代碼很好有Visible = True
,但是當代碼用於刮取數據很好,因此不會每次都看到它,所以Visible = False
。
With appIE
.Navigate "http://uk.investing.com/rates-bonds/financial-futures"
.Visible = True
End With
3)網頁將需要一些時間加載。所以,我會等待,同時它很忙...
Do While appIE.Busy
DoEvents
Loop
4)好吧,現在頁面已加載。假設我想刮掉US30Y T-Bond的更改: 我只需點擊Internet Explorer上的F12查看網頁的代碼,然後使用指針(紅圈),我將點擊元素我想颳去看看如何達到我的目的。
5)我應該做的是直接的。首先,我會由ID屬性得到被包含該值的tr
元件:
Set allRowOfData = appIE.document.getElementById("pair_8907")
在這裏,我會得到td
元件(具體的集合,tr
是一行數據,而td
是它的細胞,我們正在尋找第8,所以我會寫:?
Dim myValue As String: myValue = allRowOfData.Cells(7).innerHTML
爲什麼我寫的7,而不是8由於細胞的集合從0開始,所以第8元素的索引是7( 8-1)。短時分析這一行代碼:
.Cells()
讓我訪問td
元素;innerHTML
是包含我們尋找的值的單元格的屬性。
一旦我們有我們的價值,這是目前存儲到myValue
變量,我們可以關閉IE瀏覽器,並通過將其設置爲Nothing釋放內存:
appIE.Quit
Set appIE = Nothing
好了,現在你有你的價值,你可以做任何你想做的事情:把它放到一個單元格中(Range("A1").Value = myValue
),或者寫入一個表格的標籤(Me.label1.Text = myValue
)。
我只想指出,這不是StackOverflow的工作原理:在這裏您可以發佈有關特定編碼問題的問題,但是您應該首先進行自己的搜索。我之所以回答一個沒有顯示太多研究成果的問題,只是因爲我看到它被問了好幾次,回到我學會如何去做這件事的時候,我記得我希望能有一些更好的支持開始使用。所以我希望這個答案只是一個「學習輸入」,而不是最好/最完整的解決方案,可以爲下一個遇到同樣問題的用戶提供支持。因爲我已經學會了如何編程,這要感謝這個社區,我喜歡認爲你和其他初學者可能會使用我的意見來發現美麗的編程世界。
享受你的做法;)
絕對是一個有着多年VBA經驗的人的絕佳回答,但從來沒有想過要這樣做。這可能有助於我回答別人的問題。 – 2016-02-19 03:29:04
另一位提問者想要更多,所以我根據你的出發點給他提供了他http://stackoverflow.com/questions/41848354/website-data-table-scraper/41902620#41902620 – 2017-01-27 20:40:08
,你可以用它代替Internet Explorer的winhttprequest對象,因爲它是很好的加載數據不包括畫面n的廣告,而不是下載完整的網頁,包括廣告n的圖像那些使Internet Explorer對象重比較winhttpRequest目的。
這個問題很久以前問過。但我認爲以下信息對新手很有用。其實你可以很容易地從類名得到這樣的值。
Sub ExtractLastValue()
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Top = 0
objIE.Left = 0
objIE.Width = 800
objIE.Height = 600
objIE.Visible = True
objIE.Navigate ("https://uk.investing.com/rates-bonds/financial-futures/")
Do
DoEvents
Loop Until objIE.readystate = 4
MsgBox objIE.document.getElementsByClassName("pid-8907-last")(0).innerText
End Sub
如果你是新來的網絡抓取,請閱讀這篇博文。
而且也有各種技術來提取網頁上的數據。這篇文章解釋了幾個例子。
- 1. 使用vba從網站上刮取數據4
- 2. 使用PHP從網站刮取數據
- 3. 使用vba從多個網站刮取數據
- 4. VBA刮痧數據從多個網站
- 5. 如何從本網站刮取數據?
- 6. 從網站上刮掉員工數據
- 7. 從網頁上刮取網頁數據
- 8. 如何使用Python從本網站刮取所有數據
- 9. 如何從網站上刮取圖片?
- 10. 如何從網站上刮取徽標?
- 11. 從最新技術的網站上刮取數據的提示
- 12. iOS:從需要驗證的網站上刮取數據?
- 13. Excel VBA - 從網站獲取數據
- 14. 從VBA的網站刮特定項目
- 15. 從使用VBA的站點刮掉innerHTML
- 16. 使用Java從網頁上刮取數據?
- 17. 使用R從不同的網頁上刮取數據
- 18. 如何使用JavaScript從網站上刮取圖像?
- 19. 如何使用AlchemyAPI從網站上刮取內容?
- 20. 使用Selenium-VBA從網站獲取數據
- 21. 如何使用Excel VBA從網站中提取數據
- 22. 使用VBA從網站刮,但它不工作。該怎麼辦?
- 23. 提取從網站使用VBA
- 24. 使用Python的網頁刮取數據
- 25. 使用node.js縮放web刮取網站
- 26. python - 使用BeautifulSoup網站刮ajax網站
- 27. 使用iMacros從網站提取數據
- 28. 使用C#從網站讀取數據
- 29. 使用Jsoup從網站讀取數據
- 30. 使用python從網站提取數據
您需要使用DOM/XML解析器,那麼你可以重複元素的集合或者是指通過其XPath的具體內容。 – 2014-11-21 17:28:39