我試圖抓取一個網站,要求您向下滾動,當它觸及底部,加載更多的項目。它的有限數量的項目,所以我知道它不會永遠滾動,但有沒有這樣做的方法,而無需與瀏覽器對象交互。需要用戶交互的網頁抓取
我試圖在VB/VBA中完成這一任務,但任何語言都可以。現在,我在MS Access中模板化它,只是爲了感受網站的反應,我可以通過瀏覽器控件加載它,但它笨重。最好是我可以做一個HTTP調用。
在一個側面說明,他們是否有任何好的網頁抓取教程他們我應該看?
在此先感謝。
我試圖抓取一個網站,要求您向下滾動,當它觸及底部,加載更多的項目。它的有限數量的項目,所以我知道它不會永遠滾動,但有沒有這樣做的方法,而無需與瀏覽器對象交互。需要用戶交互的網頁抓取
我試圖在VB/VBA中完成這一任務,但任何語言都可以。現在,我在MS Access中模板化它,只是爲了感受網站的反應,我可以通過瀏覽器控件加載它,但它笨重。最好是我可以做一個HTTP調用。
在一個側面說明,他們是否有任何好的網頁抓取教程他們我應該看?
在此先感謝。
我第一次看到XHRs在Chrome瀏覽器 - 開發工具 - 網絡選項卡中顯示位於2個文件中的所有必要數據:retailers.json
(15.7 kB)和offers.json
(299 kB)。當您向下滾動頁面時實際上沒有下載任何其他數據,因此我得出結論:頁面上的腳本只是從已下載的文件中獲取數據並將項目放入頁面。我檢查參數和XHR時的標題,並創建了以下簡單的VBS,其下載文件:
strZipCode = "11590" ' your zip code here
strPathRetailers = "C:\retailers.json" ' retailers output file path
strPathOffers = "C:\offers.json" ' offers output file path
' make XHR to retrieve initial page with X-App-Token and X-NewRelic-ID
strURL = "https://ibotta.com/rebates"
XmlHttpRequest "GET", strURL, "", "", "", strResp
' extract X-App-Token eg 'loader_config={xpid:"VQAHUlVUGwcJUlBWBQg="}'
arrTmp = Split(strResp, "loader_config={xpid:""", 2)
strTmp = arrTmp(1)
arrTmp = Split(strTmp, """}", 2)
strNewRelicID = arrTmp(0)
' extract X-NewRelic-ID eg '<meta name="ibotta-t" content="nce0dc967myuho7wco:1458857196:91bf12dcd5442cf6b2100c962c656a510738150a">'
arrTmp = Split(strResp, "<meta name=""ibotta-t"" content=""", 2)
strTmp = arrTmp(1)
arrTmp = Split(strTmp, """>", 2)
strAppToken = arrTmp(0)
' put headers to array
arrHeaders = Array(_
Array("Accept", "application/json, text/javascript"), _
Array("Accept-Encoding", "deflate"), _
Array("Accept-Language", "en-US,en;q=0.5"), _
Array("Connection", "keep-alive"), _
Array("Host", "ibotta.com"), _
Array("If-Modified-Since", "Thu, 1 Jan 1970 10:00:00 GMT"), _
Array("Referer", "https", "//ibotta.com/rebates"), _
Array("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0"), _
Array("X-App-Token", strAppToken), _
Array("X-App-Version", "3.6:webapp"), _
Array("X-NewRelic-ID", strNewRelicID), _
Array("X-Requested-With", "XMLHttpRequest") _
)
' make XHR to retrieve retailers
strURL = "https://ibotta.com/web_v1/retailers.json?zip=" & strZipCode
XmlHttpRequest "GET", strURL, arrHeaders, "", "", strResp
' save retailers to file
WriteTextFile strResp, strPathRetailers, -1
' make XHR to retrieve offers
strURL = "https://ibotta.com/web_v1/offers.json"
XmlHttpRequest "GET", strURL, arrHeaders, "", "", strResp
' save offers to file
WriteTextFile strResp, strPathOffers, -1
Sub XmlHttpRequest(strMethod, strURL, arrSetHeaders, strFormData, strRespHeaders, strRespText)
Dim arrHeader
With CreateObject("Msxml2.ServerXMLHTTP")
.SetOption 2, 13056 ' SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
.Open strMethod, strURL, False
If IsArray(arrSetHeaders) Then
For Each arrHeader In arrSetHeaders
.SetRequestHeader arrHeader(0), arrHeader(1)
Next
End If
.Send strFormData
strRespHeaders = .GetAllResponseHeaders
strRespText = .ResponseText
End With
End Sub
Sub WriteTextFile(strContent, strPath, lngFormat)
' lngFormat -2 - System default, -1 - Unicode, 0 - ASCII
With CreateObject("Scripting.FileSystemObject").OpenTextFile(strPath, 2, True, lngFormat)
.Write (strContent)
.Close
End With
End Sub
您可以將這段代碼保存到文本文件聖維特.vbs
擴展和運行。
目前我可以看到共有857個報價和220個零售商,郵編11590(使用JSON查看器,如Chrome中內置或通過web service)。如果您只想處理郵政編碼11590的優惠,那麼您必須獲得零售商的列表id
,並僅篩選屬於列表中零售商的優惠。
有零售商截圖,他們每個人都有id
(概述紅色):
而且有提供的截圖,他們每個人屬於多個零售商retailer_ids
(用紅色標出也) :
進一步處理取決於你所需要的。您可以將JSON字符串解析爲對象並進行交互,或將JSON字符串轉換爲Recordset以對其進行過濾。
請在您的問題目標頁面URL中發帖,並說明您需要的數據或您擁有的代碼。 – omegastripes
https://ibotta.com/rebates – Delecron
我的唯一回應「我們找不到任何所有回扣 嘗試使用更少的過濾器。」。關於如何使XHR查看[this](http://stackoverflow.com/a/35700277/2165759)。 – omegastripes