
vba xmlhttp 抓取网页
vba xmlhttp 抓取网页(我是一家VR公司的实习生,因为我无法为狗屎编码)
网站优化 • 优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2021-10-02 18:01
vba xmlhttp 抓取网页(我是一家VR公司的实习生,因为我无法为狗屎编码)
我在 StackOverflow文章 上的第一篇文章,所以请放松我:)
我是一家 VR 公司的实习生,我正在尝试使用互联网搜索数据。我使用XMLHTTP成功提取了正确的数据(因为搜索的数据量很大),但是除非我登录,否则我会遇到无法读取信息的问题。
EG 搜索词:7980 Sunset Blvd 结果:公司 ***** ***** *****,***** *****。
如果我手动登录并搜索此位置,则可以通过星号检查所有信息。
我的问题是:如何通过 MSXML2.XMLHTTP(类似于 Google 登录表单的脚本)登录
研究了很多,遇到了这个问题文章,但是我不能把他例子的登录翻译成我的,因为我不会编码狗屎!哈哈
这是我用于网络爬行的工作代码:
Sub GetOwners()
Dim URL As String, lastRow As Long
Dim XMLHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
Dim var As String
Dim var1 As Object
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim cookie As String
Dim result_cookie As String
start_time = Time
Debug.Print "start_time:" & start_time
For i = 2 To lastRow
URL = "https://www.spokeo.com/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
Set XMLHttp = CreateObject("MSXML2.serverXMLHTTP")
XMLHttp.Open "GET", URL, False
XMLHttp.setRequestHeader "Content-Type", "text/xml"
XMLHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHttp.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHttp.responseText
Set objResultDiv = html.GetElementById("profile_selection")
Set var1 = html.GetElementById("property_owners")
Cells(i, 2).Activate
If html.GetElementById("property_owners") Is Nothing Then
Cells(i, 2).Value = "-"
Else
Cells(i, 2).Value = var1.innerText
End If
DoEvents
Next
end_time = Time
Debug.Print "end_time:" & end_time
Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
这是我的 Frankenstein 试图获取 Vitor Prado 的代码并申请我的申请:
Sub testXMLHTTP()
Dim xml As Object
Dim html As HTMLDocument
Dim dados As Object
Dim text As Object
Dim html2 As HTMLDocument
Dim xml2 As Object
Set xml = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html = CreateObject("htmlFile")
With xml
.Open "GET", "https://www.spokeo.com/login?", False
.send
End With
strCookie = xml.getResponseHeader("Set-Cookie")
html.body.innerHTML = xml.responseText
Set objvstate = html.GetElementById("__VIEWSTATE")
Set objvstategen = html.GetElementById("__VIEWSTATEGENERATOR")
Set objeventval = html.GetElementById("__EVENTVALIDATION")
vstate = objvstate.Value
vstategen = objvstategen.Value
eventval = objeventval.Value
'URL Encode ViewState
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function encode(vstate) {return encodeURIComponent(vstate);}"
Dim encoded As String
encoded = ScriptEngine.Run("encode", vstate)
vstate = encoded
'URL Encode Event Validation
ScriptEngine.AddCode "function encode(eventval) {return encodeURIComponent(eventval);}"
encoded = ScriptEngine.Run("encode", eventval)
eventval = encoded
'URL Encode ViewState Generator
ScriptEngine.AddCode "function encode(vstategen) {return encodeURIComponent(vstategen);}"
encoded = ScriptEngine.Run("encode", vstategen)
vstategen = encoded
Postdata = "__EVENTTARGET=" & "&__EVENTARGUMENT=" & "&__VIEWSTATE=" & vstate & "&__VIEWSTATEGENERATOR=" & vstategen & "&__EVENTVALIDATION=" & eventval & "&ctl00$ddlTipoUsuario=#rdBtnNaoContribuinte" & "&ctl00$UserNameAcessivel=Digite+o+Usuário" & "&ctl00$PasswordAcessivel=x" & "&ctl00$ConteudoPagina$Login1$rblTipo=rdBtnNaoContribuinte" & "&ctl00$ConteudoPagina$Login1$UserName=MYUSERNAME" & "&ctl00$ConteudoPagina$Login1$Password=MYPASSWORD" & "&ctl00$ConteudoPagina$Login1$Login=Acessar" & "&ctl00$ConteudoPagina$Login1$txtCpfCnpj=Digite+o+Usuário"
Set xml2 = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html2 = CreateObject("htmlFile")
With xml2
.Open "POST", "https://www.spokeo.com/login?", False
.setRequestHeader "Cookie", strCookie
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Content-Lenght", Len(Postdata)
.send (Postdata)
End With
html2.body.innerHTML = xml2.responseText
Set objResult = html2.GetElementById("dadosDoUsuario")
GetElementById = objResult.innerText
MsgBox GetElementById
End Sub
有很多参考我没有完全改变,因为我不知道在哪里看。
我仍然会将这两个代码合并为一个登录。首先,我知道它会分开工作。
任何帮助将不胜感激,我提前为我的编码无知道歉。
干杯! 查看全部
我在 StackOverflow文章 上的第一篇文章,所以请放松我:)
我是一家 VR 公司的实习生,我正在尝试使用互联网搜索数据。我使用XMLHTTP成功提取了正确的数据(因为搜索的数据量很大),但是除非我登录,否则我会遇到无法读取信息的问题。
EG 搜索词:7980 Sunset Blvd 结果:公司 ***** ***** *****,***** *****。
如果我手动登录并搜索此位置,则可以通过星号检查所有信息。
我的问题是:如何通过 MSXML2.XMLHTTP(类似于 Google 登录表单的脚本)登录
研究了很多,遇到了这个问题文章,但是我不能把他例子的登录翻译成我的,因为我不会编码狗屎!哈哈
这是我用于网络爬行的工作代码:
Sub GetOwners()
Dim URL As String, lastRow As Long
Dim XMLHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
Dim var As String
Dim var1 As Object
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim cookie As String
Dim result_cookie As String
start_time = Time
Debug.Print "start_time:" & start_time
For i = 2 To lastRow
URL = "https://www.spokeo.com/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
Set XMLHttp = CreateObject("MSXML2.serverXMLHTTP")
XMLHttp.Open "GET", URL, False
XMLHttp.setRequestHeader "Content-Type", "text/xml"
XMLHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHttp.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHttp.responseText
Set objResultDiv = html.GetElementById("profile_selection")
Set var1 = html.GetElementById("property_owners")
Cells(i, 2).Activate
If html.GetElementById("property_owners") Is Nothing Then
Cells(i, 2).Value = "-"
Else
Cells(i, 2).Value = var1.innerText
End If
DoEvents
Next
end_time = Time
Debug.Print "end_time:" & end_time
Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
这是我的 Frankenstein 试图获取 Vitor Prado 的代码并申请我的申请:
Sub testXMLHTTP()
Dim xml As Object
Dim html As HTMLDocument
Dim dados As Object
Dim text As Object
Dim html2 As HTMLDocument
Dim xml2 As Object
Set xml = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html = CreateObject("htmlFile")
With xml
.Open "GET", "https://www.spokeo.com/login?", False
.send
End With
strCookie = xml.getResponseHeader("Set-Cookie")
html.body.innerHTML = xml.responseText
Set objvstate = html.GetElementById("__VIEWSTATE")
Set objvstategen = html.GetElementById("__VIEWSTATEGENERATOR")
Set objeventval = html.GetElementById("__EVENTVALIDATION")
vstate = objvstate.Value
vstategen = objvstategen.Value
eventval = objeventval.Value
'URL Encode ViewState
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function encode(vstate) {return encodeURIComponent(vstate);}"
Dim encoded As String
encoded = ScriptEngine.Run("encode", vstate)
vstate = encoded
'URL Encode Event Validation
ScriptEngine.AddCode "function encode(eventval) {return encodeURIComponent(eventval);}"
encoded = ScriptEngine.Run("encode", eventval)
eventval = encoded
'URL Encode ViewState Generator
ScriptEngine.AddCode "function encode(vstategen) {return encodeURIComponent(vstategen);}"
encoded = ScriptEngine.Run("encode", vstategen)
vstategen = encoded
Postdata = "__EVENTTARGET=" & "&__EVENTARGUMENT=" & "&__VIEWSTATE=" & vstate & "&__VIEWSTATEGENERATOR=" & vstategen & "&__EVENTVALIDATION=" & eventval & "&ctl00$ddlTipoUsuario=#rdBtnNaoContribuinte" & "&ctl00$UserNameAcessivel=Digite+o+Usuário" & "&ctl00$PasswordAcessivel=x" & "&ctl00$ConteudoPagina$Login1$rblTipo=rdBtnNaoContribuinte" & "&ctl00$ConteudoPagina$Login1$UserName=MYUSERNAME" & "&ctl00$ConteudoPagina$Login1$Password=MYPASSWORD" & "&ctl00$ConteudoPagina$Login1$Login=Acessar" & "&ctl00$ConteudoPagina$Login1$txtCpfCnpj=Digite+o+Usuário"
Set xml2 = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html2 = CreateObject("htmlFile")
With xml2
.Open "POST", "https://www.spokeo.com/login?", False
.setRequestHeader "Cookie", strCookie
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Content-Lenght", Len(Postdata)
.send (Postdata)
End With
html2.body.innerHTML = xml2.responseText
Set objResult = html2.GetElementById("dadosDoUsuario")
GetElementById = objResult.innerText
MsgBox GetElementById
End Sub
有很多参考我没有完全改变,因为我不知道在哪里看。
我仍然会将这两个代码合并为一个登录。首先,我知道它会分开工作。
任何帮助将不胜感激,我提前为我的编码无知道歉。
干杯! 查看全部
vba xmlhttp 抓取网页(我是一家VR公司的实习生,因为我无法为狗屎编码)
我在 StackOverflow文章 上的第一篇文章,所以请放松我:)
我是一家 VR 公司的实习生,我正在尝试使用互联网搜索数据。我使用XMLHTTP成功提取了正确的数据(因为搜索的数据量很大),但是除非我登录,否则我会遇到无法读取信息的问题。
EG 搜索词:7980 Sunset Blvd 结果:公司 ***** ***** *****,***** *****。
如果我手动登录并搜索此位置,则可以通过星号检查所有信息。
我的问题是:如何通过 MSXML2.XMLHTTP(类似于 Google 登录表单的脚本)登录
研究了很多,遇到了这个问题文章,但是我不能把他例子的登录翻译成我的,因为我不会编码狗屎!哈哈
这是我用于网络爬行的工作代码:
Sub GetOwners()
Dim URL As String, lastRow As Long
Dim XMLHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
Dim var As String
Dim var1 As Object
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim cookie As String
Dim result_cookie As String
start_time = Time
Debug.Print "start_time:" & start_time
For i = 2 To lastRow
URL = "https://www.spokeo.com/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
Set XMLHttp = CreateObject("MSXML2.serverXMLHTTP")
XMLHttp.Open "GET", URL, False
XMLHttp.setRequestHeader "Content-Type", "text/xml"
XMLHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHttp.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHttp.responseText
Set objResultDiv = html.GetElementById("profile_selection")
Set var1 = html.GetElementById("property_owners")
Cells(i, 2).Activate
If html.GetElementById("property_owners") Is Nothing Then
Cells(i, 2).Value = "-"
Else
Cells(i, 2).Value = var1.innerText
End If
DoEvents
Next
end_time = Time
Debug.Print "end_time:" & end_time
Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
这是我的 Frankenstein 试图获取 Vitor Prado 的代码并申请我的申请:
Sub testXMLHTTP()
Dim xml As Object
Dim html As HTMLDocument
Dim dados As Object
Dim text As Object
Dim html2 As HTMLDocument
Dim xml2 As Object
Set xml = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html = CreateObject("htmlFile")
With xml
.Open "GET", "https://www.spokeo.com/login?", False
.send
End With
strCookie = xml.getResponseHeader("Set-Cookie")
html.body.innerHTML = xml.responseText
Set objvstate = html.GetElementById("__VIEWSTATE")
Set objvstategen = html.GetElementById("__VIEWSTATEGENERATOR")
Set objeventval = html.GetElementById("__EVENTVALIDATION")
vstate = objvstate.Value
vstategen = objvstategen.Value
eventval = objeventval.Value
'URL Encode ViewState
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function encode(vstate) {return encodeURIComponent(vstate);}"
Dim encoded As String
encoded = ScriptEngine.Run("encode", vstate)
vstate = encoded
'URL Encode Event Validation
ScriptEngine.AddCode "function encode(eventval) {return encodeURIComponent(eventval);}"
encoded = ScriptEngine.Run("encode", eventval)
eventval = encoded
'URL Encode ViewState Generator
ScriptEngine.AddCode "function encode(vstategen) {return encodeURIComponent(vstategen);}"
encoded = ScriptEngine.Run("encode", vstategen)
vstategen = encoded
Postdata = "__EVENTTARGET=" & "&__EVENTARGUMENT=" & "&__VIEWSTATE=" & vstate & "&__VIEWSTATEGENERATOR=" & vstategen & "&__EVENTVALIDATION=" & eventval & "&ctl00$ddlTipoUsuario=#rdBtnNaoContribuinte" & "&ctl00$UserNameAcessivel=Digite+o+Usuário" & "&ctl00$PasswordAcessivel=x" & "&ctl00$ConteudoPagina$Login1$rblTipo=rdBtnNaoContribuinte" & "&ctl00$ConteudoPagina$Login1$UserName=MYUSERNAME" & "&ctl00$ConteudoPagina$Login1$Password=MYPASSWORD" & "&ctl00$ConteudoPagina$Login1$Login=Acessar" & "&ctl00$ConteudoPagina$Login1$txtCpfCnpj=Digite+o+Usuário"
Set xml2 = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html2 = CreateObject("htmlFile")
With xml2
.Open "POST", "https://www.spokeo.com/login?", False
.setRequestHeader "Cookie", strCookie
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Content-Lenght", Len(Postdata)
.send (Postdata)
End With
html2.body.innerHTML = xml2.responseText
Set objResult = html2.GetElementById("dadosDoUsuario")
GetElementById = objResult.innerText
MsgBox GetElementById
End Sub
有很多参考我没有完全改变,因为我不知道在哪里看。
我仍然会将这两个代码合并为一个登录。首先,我知道它会分开工作。
任何帮助将不胜感激,我提前为我的编码无知道歉。
干杯!
vba xmlhttp 抓取网页(使用ExcelVBA的方式获取搜索引擎官方、第三方网站的数据问题)
网站优化 • 优采云 发表了文章 • 0 个评论 • 149 次浏览 • 2021-09-26 10:28
vba xmlhttp 抓取网页(使用ExcelVBA的方式获取搜索引擎官方、第三方网站的数据问题)
一个SEO项目在执行过程中,通常需要查看数据报表来反映项目的表现,比如网站收录、域名PR、预估流量、Alexa排名等。本文将介绍使用VBA从网上抓取网站的基础数据的方法。通过建立自动化的数据上报系统,提高了SEO数据采集的效率。使用ExcelVBA从搜索引擎网站获取官方和第三方数据需要解决以下基本技术问题(更复杂的情况后面会讲,比如需要登录查询的情况等) .):1.如何在网页代码中查找目标数据(通过查看源代码,准确定位目标数据的位置)2. 使用VBA代码获取数据(使用Microsoft.XMLHTTP等对象)3.字符串处理获取目标数据(使用replace、split等函数进行处理) 这次我将演示如何使用VBA来编写自定义函数,从百度获取收录数据。其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据
使用百度中的site:命令返回查询结果。如上图所示,可以看到收录的数量为4,890,000。使用 Firefox 中的 Firebug 插件查看源代码。结果显示在蓝色块中,如下图所示。我们要采集的数据在网页的 HTML 代码中。
2.使用Microsoft.XMLHTTP对象获取网页数据,并使用split函数进行文本处理
上图为功能代码(源码见下),通过该方法可以快速查询目标网页的收录数据。首先定义URL参数作为函数的输入值,字符类型为String(字符串)类型;然后定义 htmlBody 变量来存储 网站 HTML 代码。接下来更重要的一步是定义和声明htmlObject对象,并使用With方法配置查询地址和原创数据的初步清理。Replace函数的作用是删除网页源代码中的回车换行(vbCrLf),方便下一步Split函数的处理。得到简单处理的网页数据后,得到网页HTML代码。此代码存储在 htmlBody 变量中,而我们要获取的收录数据就存储在其中。第一步,我们查看了网站的源代码,网站的收录的数量收录在这句话中:“找到的相关结果数为489万”。 , 使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。
至此,编写简单查询函数的过程基本结束。这种方式虽然省去了手动频繁查询数据的麻烦,但是使用函数获取数据的方法还是存在很多不便:1.函数维护成本比较高。百度或第三方网站的前端代码更新后,查询语句也需要做相应的修改。在使用中,偶尔会遇到需要更新拆分功能的情况。2. 批量自动化是不可能的。在做SEO项目时,我们需要查询各种数据,包括收录、PR、排名、BR等数据做周报或月报。通常收录收录很多不同的列,竞争对手的URL等。使用函数的方法在批量查询中仍然效率不高。当然还有一个解决方案,可以结合Excel表格控件,结合VBA代码,通过一键操作,完成项目周报数据的查询。要实现这样的功能需要更复杂的 VBA 代码。未来文章,我们会继续讨论。由于时间关系,一些技术细节没有过多解释。希望大家踊跃回复讨论。如果有对SEO数据分析感兴趣的朋友,欢迎讨论。======源代码======FunctionBaiduIndex(urlAsString)'定义函数名DimhtmlBody'定义字符串变量,用于存放网页源代码DimhtmlObjectAsObject'定义对象变量SethtmlObject=CreateObject("microsoft.xmlhttp") WithhtmlObject.Open"GET",":"&url,False' 查看全部
一个SEO项目在执行过程中,通常需要查看数据报表来反映项目的表现,比如网站收录、域名PR、预估流量、Alexa排名等。本文将介绍使用VBA从网上抓取网站的基础数据的方法。通过建立自动化的数据上报系统,提高了SEO数据采集的效率。使用ExcelVBA从搜索引擎网站获取官方和第三方数据需要解决以下基本技术问题(更复杂的情况后面会讲,比如需要登录查询的情况等) .):1.如何在网页代码中查找目标数据(通过查看源代码,准确定位目标数据的位置)2. 使用VBA代码获取数据(使用Microsoft.XMLHTTP等对象)3.字符串处理获取目标数据(使用replace、split等函数进行处理) 这次我将演示如何使用VBA来编写自定义函数,从百度获取收录数据。其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据
使用百度中的site:命令返回查询结果。如上图所示,可以看到收录的数量为4,890,000。使用 Firefox 中的 Firebug 插件查看源代码。结果显示在蓝色块中,如下图所示。我们要采集的数据在网页的 HTML 代码中。
2.使用Microsoft.XMLHTTP对象获取网页数据,并使用split函数进行文本处理
上图为功能代码(源码见下),通过该方法可以快速查询目标网页的收录数据。首先定义URL参数作为函数的输入值,字符类型为String(字符串)类型;然后定义 htmlBody 变量来存储 网站 HTML 代码。接下来更重要的一步是定义和声明htmlObject对象,并使用With方法配置查询地址和原创数据的初步清理。Replace函数的作用是删除网页源代码中的回车换行(vbCrLf),方便下一步Split函数的处理。得到简单处理的网页数据后,得到网页HTML代码。此代码存储在 htmlBody 变量中,而我们要获取的收录数据就存储在其中。第一步,我们查看了网站的源代码,网站的收录的数量收录在这句话中:“找到的相关结果数为489万”。 , 使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。
至此,编写简单查询函数的过程基本结束。这种方式虽然省去了手动频繁查询数据的麻烦,但是使用函数获取数据的方法还是存在很多不便:1.函数维护成本比较高。百度或第三方网站的前端代码更新后,查询语句也需要做相应的修改。在使用中,偶尔会遇到需要更新拆分功能的情况。2. 批量自动化是不可能的。在做SEO项目时,我们需要查询各种数据,包括收录、PR、排名、BR等数据做周报或月报。通常收录收录很多不同的列,竞争对手的URL等。使用函数的方法在批量查询中仍然效率不高。当然还有一个解决方案,可以结合Excel表格控件,结合VBA代码,通过一键操作,完成项目周报数据的查询。要实现这样的功能需要更复杂的 VBA 代码。未来文章,我们会继续讨论。由于时间关系,一些技术细节没有过多解释。希望大家踊跃回复讨论。如果有对SEO数据分析感兴趣的朋友,欢迎讨论。======源代码======FunctionBaiduIndex(urlAsString)'定义函数名DimhtmlBody'定义字符串变量,用于存放网页源代码DimhtmlObjectAsObject'定义对象变量SethtmlObject=CreateObject("microsoft.xmlhttp") WithhtmlObject.Open"GET",":"&url,False' 查看全部
vba xmlhttp 抓取网页(使用ExcelVBA的方式获取搜索引擎官方、第三方网站的数据问题)
一个SEO项目在执行过程中,通常需要查看数据报表来反映项目的表现,比如网站收录、域名PR、预估流量、Alexa排名等。本文将介绍使用VBA从网上抓取网站的基础数据的方法。通过建立自动化的数据上报系统,提高了SEO数据采集的效率。使用ExcelVBA从搜索引擎网站获取官方和第三方数据需要解决以下基本技术问题(更复杂的情况后面会讲,比如需要登录查询的情况等) .):1.如何在网页代码中查找目标数据(通过查看源代码,准确定位目标数据的位置)2. 使用VBA代码获取数据(使用Microsoft.XMLHTTP等对象)3.字符串处理获取目标数据(使用replace、split等函数进行处理) 这次我将演示如何使用VBA来编写自定义函数,从百度获取收录数据。其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据
使用百度中的site:命令返回查询结果。如上图所示,可以看到收录的数量为4,890,000。使用 Firefox 中的 Firebug 插件查看源代码。结果显示在蓝色块中,如下图所示。我们要采集的数据在网页的 HTML 代码中。
2.使用Microsoft.XMLHTTP对象获取网页数据,并使用split函数进行文本处理
上图为功能代码(源码见下),通过该方法可以快速查询目标网页的收录数据。首先定义URL参数作为函数的输入值,字符类型为String(字符串)类型;然后定义 htmlBody 变量来存储 网站 HTML 代码。接下来更重要的一步是定义和声明htmlObject对象,并使用With方法配置查询地址和原创数据的初步清理。Replace函数的作用是删除网页源代码中的回车换行(vbCrLf),方便下一步Split函数的处理。得到简单处理的网页数据后,得到网页HTML代码。此代码存储在 htmlBody 变量中,而我们要获取的收录数据就存储在其中。第一步,我们查看了网站的源代码,网站的收录的数量收录在这句话中:“找到的相关结果数为489万”。 , 使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。
至此,编写简单查询函数的过程基本结束。这种方式虽然省去了手动频繁查询数据的麻烦,但是使用函数获取数据的方法还是存在很多不便:1.函数维护成本比较高。百度或第三方网站的前端代码更新后,查询语句也需要做相应的修改。在使用中,偶尔会遇到需要更新拆分功能的情况。2. 批量自动化是不可能的。在做SEO项目时,我们需要查询各种数据,包括收录、PR、排名、BR等数据做周报或月报。通常收录收录很多不同的列,竞争对手的URL等。使用函数的方法在批量查询中仍然效率不高。当然还有一个解决方案,可以结合Excel表格控件,结合VBA代码,通过一键操作,完成项目周报数据的查询。要实现这样的功能需要更复杂的 VBA 代码。未来文章,我们会继续讨论。由于时间关系,一些技术细节没有过多解释。希望大家踊跃回复讨论。如果有对SEO数据分析感兴趣的朋友,欢迎讨论。======源代码======FunctionBaiduIndex(urlAsString)'定义函数名DimhtmlBody'定义字符串变量,用于存放网页源代码DimhtmlObjectAsObject'定义对象变量SethtmlObject=CreateObject("microsoft.xmlhttp") WithhtmlObject.Open"GET",":"&url,False'
vba xmlhttp 抓取网页(从我一直使用的:我正在寻找一种方法来抓取网页2)
网站优化 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-09-24 04:09
vba xmlhttp 抓取网页(从我一直使用的:我正在寻找一种方法来抓取网页2)
从我一直在使用的:
Url$ = "www.somewebpage.com"
Dim Http As New XMLHTTP60, worldData As Object, S$
With Http
.Open "GET", Url, False
.send
S = .responseText
End With
1)我正在寻找一种抓取网页的方法2)从第一个节点的javascript(请注意javascripts可能实际上并不存在)寻找一种从网页抓取数据数组的方法((如图所示)下面)方法,然后是节点内第一个值的坐标......我想返回下面的例子。我将如何开始:
With CreateObject("VBScript.RegExp")
.Pattern = "?????"
Set worldData = .Execute(S)
If worldData.Count > 0 Then
'here to loop and create/assing into arrays
End If
End With
网页上的数据:
var g_mapperData = {
40: {
'0': {
count: 3,
coords: [
[45.2,69.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[45.5,69.5,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[44.8,68,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
12: {
'0': {
count: 1,
coords: [
[48.4,86.61,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
3524: {
'0': {
count: 2,
coords: [
[48.2,70.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[46.1,70.7,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
}
};
数组的预期结果:
MapID = {40, 12, 3524}
Xcoord = {45.2, 48.4, 48.2}
Ycoord = {69.9, 86.61, 70.9}
每个数组应该始终具有相同的值长度,因为每个“MapID”中至少有一个 X/Y 记录(可以更多,甚至多达数百个),而 MapID 可以只有一个甚至数百个。
谢谢巫师的魔法 查看全部
从我一直在使用的:
Url$ = "www.somewebpage.com"
Dim Http As New XMLHTTP60, worldData As Object, S$
With Http
.Open "GET", Url, False
.send
S = .responseText
End With
1)我正在寻找一种抓取网页的方法2)从第一个节点的javascript(请注意javascripts可能实际上并不存在)寻找一种从网页抓取数据数组的方法((如图所示)下面)方法,然后是节点内第一个值的坐标......我想返回下面的例子。我将如何开始:
With CreateObject("VBScript.RegExp")
.Pattern = "?????"
Set worldData = .Execute(S)
If worldData.Count > 0 Then
'here to loop and create/assing into arrays
End If
End With
网页上的数据:
var g_mapperData = {
40: {
'0': {
count: 3,
coords: [
[45.2,69.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[45.5,69.5,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[44.8,68,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
12: {
'0': {
count: 1,
coords: [
[48.4,86.61,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
3524: {
'0': {
count: 2,
coords: [
[48.2,70.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[46.1,70.7,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
}
};
数组的预期结果:
MapID = {40, 12, 3524}
Xcoord = {45.2, 48.4, 48.2}
Ycoord = {69.9, 86.61, 70.9}
每个数组应该始终具有相同的值长度,因为每个“MapID”中至少有一个 X/Y 记录(可以更多,甚至多达数百个),而 MapID 可以只有一个甚至数百个。
谢谢巫师的魔法 查看全部
vba xmlhttp 抓取网页(从我一直使用的:我正在寻找一种方法来抓取网页2)
从我一直在使用的:
Url$ = "www.somewebpage.com"
Dim Http As New XMLHTTP60, worldData As Object, S$
With Http
.Open "GET", Url, False
.send
S = .responseText
End With
1)我正在寻找一种抓取网页的方法2)从第一个节点的javascript(请注意javascripts可能实际上并不存在)寻找一种从网页抓取数据数组的方法((如图所示)下面)方法,然后是节点内第一个值的坐标......我想返回下面的例子。我将如何开始:
With CreateObject("VBScript.RegExp")
.Pattern = "?????"
Set worldData = .Execute(S)
If worldData.Count > 0 Then
'here to loop and create/assing into arrays
End If
End With
网页上的数据:
var g_mapperData = {
40: {
'0': {
count: 3,
coords: [
[45.2,69.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[45.5,69.5,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[44.8,68,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
12: {
'0': {
count: 1,
coords: [
[48.4,86.61,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
3524: {
'0': {
count: 2,
coords: [
[48.2,70.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[46.1,70.7,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
}
};
数组的预期结果:
MapID = {40, 12, 3524}
Xcoord = {45.2, 48.4, 48.2}
Ycoord = {69.9, 86.61, 70.9}
每个数组应该始终具有相同的值长度,因为每个“MapID”中至少有一个 X/Y 记录(可以更多,甚至多达数百个),而 MapID 可以只有一个甚至数百个。
谢谢巫师的魔法
vba xmlhttp 抓取网页(获取网页数据链接、识别汉字编码、转换和处理字符串并得到所需要的简单方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 190 次浏览 • 2021-09-18 05:00
vba xmlhttp 抓取网页(获取网页数据链接、识别汉字编码、转换和处理字符串并得到所需要的简单方法)
第1课小结:
通过一个示例,本课程介绍获取网页数据链接、识别汉字编码、转换和处理字符串以及获取所需数据的简单方法。下课后,请找到网站更多的测试和练习如何使用数据包捕获软件以及获取字符串后使用split等函数提取数据的基本技能
在实际的网页采集中,我们经常会遇到比示例复杂几倍甚至几十倍的网页网站. 完整的web采集程序需要处理以下问题:
1、如有必要,登录至网站。可能需要验证码(需要图像采集和OCR识别)
2、找到网站的初始链接,并获取隐藏的提交信息,如Cookie或viewstate,以准备提交真实的数据链接
3、如有必要,查找网站中文的设置方法,可以直接写入链接、提交的参数中,或在特殊语言设置链接提交中
4、找到网站的数据链,抓取包裹,获取参考值,解防盗链
5、处理初始网页并获取后续数据链接提交所需的参数(可能没有或很多)
6、处理网站数据链路的提交参数(可能有时间戳),该参数可能处于get模式或post模式。后者还处理URLEncode编码或其他形式的编码(在UTF-8编码的情况下,xmlhttp将自行处理;winhttp可以通过参数选择URL编码的格式)
7、判断网站返回数据的编码,并将其处理为可识别的字符串(可能需要htmlfile对象来快速操作HTML文档中的表等)
8、处理需要采集数据的字符串。可以从中提取页码,可以提取下一页的参数,并且可以以数组的形式提取所需信息(特别是对于网页表)
9、循环6~8,直到完成数据提取
事实上,不管网站有多复杂,获取数据的基础只不过是两点:
1、捕获数据包,查看链接、cookie、引用、post参数、隐藏提交参数、MD5或RSA加密参数等,然后模拟提交
2、进程编码和提取字符串
只要你掌握了这两个基本步骤,再加上充足的时间、坚定的信念、充分的耐心和一点运气,网页采集的工作就会很容易解决
相信我
文中还介绍了用VBA调用JS函数的几种方法 查看全部
第1课小结:
通过一个示例,本课程介绍获取网页数据链接、识别汉字编码、转换和处理字符串以及获取所需数据的简单方法。下课后,请找到网站更多的测试和练习如何使用数据包捕获软件以及获取字符串后使用split等函数提取数据的基本技能
在实际的网页采集中,我们经常会遇到比示例复杂几倍甚至几十倍的网页网站. 完整的web采集程序需要处理以下问题:
1、如有必要,登录至网站。可能需要验证码(需要图像采集和OCR识别)
2、找到网站的初始链接,并获取隐藏的提交信息,如Cookie或viewstate,以准备提交真实的数据链接
3、如有必要,查找网站中文的设置方法,可以直接写入链接、提交的参数中,或在特殊语言设置链接提交中
4、找到网站的数据链,抓取包裹,获取参考值,解防盗链
5、处理初始网页并获取后续数据链接提交所需的参数(可能没有或很多)
6、处理网站数据链路的提交参数(可能有时间戳),该参数可能处于get模式或post模式。后者还处理URLEncode编码或其他形式的编码(在UTF-8编码的情况下,xmlhttp将自行处理;winhttp可以通过参数选择URL编码的格式)
7、判断网站返回数据的编码,并将其处理为可识别的字符串(可能需要htmlfile对象来快速操作HTML文档中的表等)
8、处理需要采集数据的字符串。可以从中提取页码,可以提取下一页的参数,并且可以以数组的形式提取所需信息(特别是对于网页表)
9、循环6~8,直到完成数据提取
事实上,不管网站有多复杂,获取数据的基础只不过是两点:
1、捕获数据包,查看链接、cookie、引用、post参数、隐藏提交参数、MD5或RSA加密参数等,然后模拟提交
2、进程编码和提取字符串
只要你掌握了这两个基本步骤,再加上充足的时间、坚定的信念、充分的耐心和一点运气,网页采集的工作就会很容易解决
相信我
文中还介绍了用VBA调用JS函数的几种方法 查看全部
vba xmlhttp 抓取网页(获取网页数据链接、识别汉字编码、转换和处理字符串并得到所需要的简单方法)
第1课小结:
通过一个示例,本课程介绍获取网页数据链接、识别汉字编码、转换和处理字符串以及获取所需数据的简单方法。下课后,请找到网站更多的测试和练习如何使用数据包捕获软件以及获取字符串后使用split等函数提取数据的基本技能
在实际的网页采集中,我们经常会遇到比示例复杂几倍甚至几十倍的网页网站. 完整的web采集程序需要处理以下问题:
1、如有必要,登录至网站。可能需要验证码(需要图像采集和OCR识别)
2、找到网站的初始链接,并获取隐藏的提交信息,如Cookie或viewstate,以准备提交真实的数据链接
3、如有必要,查找网站中文的设置方法,可以直接写入链接、提交的参数中,或在特殊语言设置链接提交中
4、找到网站的数据链,抓取包裹,获取参考值,解防盗链
5、处理初始网页并获取后续数据链接提交所需的参数(可能没有或很多)
6、处理网站数据链路的提交参数(可能有时间戳),该参数可能处于get模式或post模式。后者还处理URLEncode编码或其他形式的编码(在UTF-8编码的情况下,xmlhttp将自行处理;winhttp可以通过参数选择URL编码的格式)
7、判断网站返回数据的编码,并将其处理为可识别的字符串(可能需要htmlfile对象来快速操作HTML文档中的表等)
8、处理需要采集数据的字符串。可以从中提取页码,可以提取下一页的参数,并且可以以数组的形式提取所需信息(特别是对于网页表)
9、循环6~8,直到完成数据提取
事实上,不管网站有多复杂,获取数据的基础只不过是两点:
1、捕获数据包,查看链接、cookie、引用、post参数、隐藏提交参数、MD5或RSA加密参数等,然后模拟提交
2、进程编码和提取字符串
只要你掌握了这两个基本步骤,再加上充足的时间、坚定的信念、充分的耐心和一点运气,网页采集的工作就会很容易解决
相信我
文中还介绍了用VBA调用JS函数的几种方法
vba xmlhttp 抓取网页(我是一家VR公司的实习生,因为我无法为狗屎编码)
网站优化 • 优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2021-10-02 18:01
vba xmlhttp 抓取网页(我是一家VR公司的实习生,因为我无法为狗屎编码)
我在 StackOverflow文章 上的第一篇文章,所以请放松我:)
我是一家 VR 公司的实习生,我正在尝试使用互联网搜索数据。我使用XMLHTTP成功提取了正确的数据(因为搜索的数据量很大),但是除非我登录,否则我会遇到无法读取信息的问题。
EG 搜索词:7980 Sunset Blvd 结果:公司 ***** ***** *****,***** *****。
如果我手动登录并搜索此位置,则可以通过星号检查所有信息。
我的问题是:如何通过 MSXML2.XMLHTTP(类似于 Google 登录表单的脚本)登录
研究了很多,遇到了这个问题文章,但是我不能把他例子的登录翻译成我的,因为我不会编码狗屎!哈哈
这是我用于网络爬行的工作代码:
Sub GetOwners()
Dim URL As String, lastRow As Long
Dim XMLHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
Dim var As String
Dim var1 As Object
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim cookie As String
Dim result_cookie As String
start_time = Time
Debug.Print "start_time:" & start_time
For i = 2 To lastRow
URL = "https://www.spokeo.com/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
Set XMLHttp = CreateObject("MSXML2.serverXMLHTTP")
XMLHttp.Open "GET", URL, False
XMLHttp.setRequestHeader "Content-Type", "text/xml"
XMLHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHttp.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHttp.responseText
Set objResultDiv = html.GetElementById("profile_selection")
Set var1 = html.GetElementById("property_owners")
Cells(i, 2).Activate
If html.GetElementById("property_owners") Is Nothing Then
Cells(i, 2).Value = "-"
Else
Cells(i, 2).Value = var1.innerText
End If
DoEvents
Next
end_time = Time
Debug.Print "end_time:" & end_time
Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
这是我的 Frankenstein 试图获取 Vitor Prado 的代码并申请我的申请:
Sub testXMLHTTP()
Dim xml As Object
Dim html As HTMLDocument
Dim dados As Object
Dim text As Object
Dim html2 As HTMLDocument
Dim xml2 As Object
Set xml = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html = CreateObject("htmlFile")
With xml
.Open "GET", "https://www.spokeo.com/login?", False
.send
End With
strCookie = xml.getResponseHeader("Set-Cookie")
html.body.innerHTML = xml.responseText
Set objvstate = html.GetElementById("__VIEWSTATE")
Set objvstategen = html.GetElementById("__VIEWSTATEGENERATOR")
Set objeventval = html.GetElementById("__EVENTVALIDATION")
vstate = objvstate.Value
vstategen = objvstategen.Value
eventval = objeventval.Value
'URL Encode ViewState
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function encode(vstate) {return encodeURIComponent(vstate);}"
Dim encoded As String
encoded = ScriptEngine.Run("encode", vstate)
vstate = encoded
'URL Encode Event Validation
ScriptEngine.AddCode "function encode(eventval) {return encodeURIComponent(eventval);}"
encoded = ScriptEngine.Run("encode", eventval)
eventval = encoded
'URL Encode ViewState Generator
ScriptEngine.AddCode "function encode(vstategen) {return encodeURIComponent(vstategen);}"
encoded = ScriptEngine.Run("encode", vstategen)
vstategen = encoded
Postdata = "__EVENTTARGET=" & "&__EVENTARGUMENT=" & "&__VIEWSTATE=" & vstate & "&__VIEWSTATEGENERATOR=" & vstategen & "&__EVENTVALIDATION=" & eventval & "&ctl00$ddlTipoUsuario=#rdBtnNaoContribuinte" & "&ctl00$UserNameAcessivel=Digite+o+Usuário" & "&ctl00$PasswordAcessivel=x" & "&ctl00$ConteudoPagina$Login1$rblTipo=rdBtnNaoContribuinte" & "&ctl00$ConteudoPagina$Login1$UserName=MYUSERNAME" & "&ctl00$ConteudoPagina$Login1$Password=MYPASSWORD" & "&ctl00$ConteudoPagina$Login1$Login=Acessar" & "&ctl00$ConteudoPagina$Login1$txtCpfCnpj=Digite+o+Usuário"
Set xml2 = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html2 = CreateObject("htmlFile")
With xml2
.Open "POST", "https://www.spokeo.com/login?", False
.setRequestHeader "Cookie", strCookie
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Content-Lenght", Len(Postdata)
.send (Postdata)
End With
html2.body.innerHTML = xml2.responseText
Set objResult = html2.GetElementById("dadosDoUsuario")
GetElementById = objResult.innerText
MsgBox GetElementById
End Sub
有很多参考我没有完全改变,因为我不知道在哪里看。
我仍然会将这两个代码合并为一个登录。首先,我知道它会分开工作。
任何帮助将不胜感激,我提前为我的编码无知道歉。
干杯! 查看全部
我在 StackOverflow文章 上的第一篇文章,所以请放松我:)
我是一家 VR 公司的实习生,我正在尝试使用互联网搜索数据。我使用XMLHTTP成功提取了正确的数据(因为搜索的数据量很大),但是除非我登录,否则我会遇到无法读取信息的问题。
EG 搜索词:7980 Sunset Blvd 结果:公司 ***** ***** *****,***** *****。
如果我手动登录并搜索此位置,则可以通过星号检查所有信息。
我的问题是:如何通过 MSXML2.XMLHTTP(类似于 Google 登录表单的脚本)登录
研究了很多,遇到了这个问题文章,但是我不能把他例子的登录翻译成我的,因为我不会编码狗屎!哈哈
这是我用于网络爬行的工作代码:
Sub GetOwners()
Dim URL As String, lastRow As Long
Dim XMLHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
Dim var As String
Dim var1 As Object
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim cookie As String
Dim result_cookie As String
start_time = Time
Debug.Print "start_time:" & start_time
For i = 2 To lastRow
URL = "https://www.spokeo.com/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
Set XMLHttp = CreateObject("MSXML2.serverXMLHTTP")
XMLHttp.Open "GET", URL, False
XMLHttp.setRequestHeader "Content-Type", "text/xml"
XMLHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHttp.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHttp.responseText
Set objResultDiv = html.GetElementById("profile_selection")
Set var1 = html.GetElementById("property_owners")
Cells(i, 2).Activate
If html.GetElementById("property_owners") Is Nothing Then
Cells(i, 2).Value = "-"
Else
Cells(i, 2).Value = var1.innerText
End If
DoEvents
Next
end_time = Time
Debug.Print "end_time:" & end_time
Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
这是我的 Frankenstein 试图获取 Vitor Prado 的代码并申请我的申请:
Sub testXMLHTTP()
Dim xml As Object
Dim html As HTMLDocument
Dim dados As Object
Dim text As Object
Dim html2 As HTMLDocument
Dim xml2 As Object
Set xml = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html = CreateObject("htmlFile")
With xml
.Open "GET", "https://www.spokeo.com/login?", False
.send
End With
strCookie = xml.getResponseHeader("Set-Cookie")
html.body.innerHTML = xml.responseText
Set objvstate = html.GetElementById("__VIEWSTATE")
Set objvstategen = html.GetElementById("__VIEWSTATEGENERATOR")
Set objeventval = html.GetElementById("__EVENTVALIDATION")
vstate = objvstate.Value
vstategen = objvstategen.Value
eventval = objeventval.Value
'URL Encode ViewState
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function encode(vstate) {return encodeURIComponent(vstate);}"
Dim encoded As String
encoded = ScriptEngine.Run("encode", vstate)
vstate = encoded
'URL Encode Event Validation
ScriptEngine.AddCode "function encode(eventval) {return encodeURIComponent(eventval);}"
encoded = ScriptEngine.Run("encode", eventval)
eventval = encoded
'URL Encode ViewState Generator
ScriptEngine.AddCode "function encode(vstategen) {return encodeURIComponent(vstategen);}"
encoded = ScriptEngine.Run("encode", vstategen)
vstategen = encoded
Postdata = "__EVENTTARGET=" & "&__EVENTARGUMENT=" & "&__VIEWSTATE=" & vstate & "&__VIEWSTATEGENERATOR=" & vstategen & "&__EVENTVALIDATION=" & eventval & "&ctl00$ddlTipoUsuario=#rdBtnNaoContribuinte" & "&ctl00$UserNameAcessivel=Digite+o+Usuário" & "&ctl00$PasswordAcessivel=x" & "&ctl00$ConteudoPagina$Login1$rblTipo=rdBtnNaoContribuinte" & "&ctl00$ConteudoPagina$Login1$UserName=MYUSERNAME" & "&ctl00$ConteudoPagina$Login1$Password=MYPASSWORD" & "&ctl00$ConteudoPagina$Login1$Login=Acessar" & "&ctl00$ConteudoPagina$Login1$txtCpfCnpj=Digite+o+Usuário"
Set xml2 = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html2 = CreateObject("htmlFile")
With xml2
.Open "POST", "https://www.spokeo.com/login?", False
.setRequestHeader "Cookie", strCookie
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Content-Lenght", Len(Postdata)
.send (Postdata)
End With
html2.body.innerHTML = xml2.responseText
Set objResult = html2.GetElementById("dadosDoUsuario")
GetElementById = objResult.innerText
MsgBox GetElementById
End Sub
有很多参考我没有完全改变,因为我不知道在哪里看。
我仍然会将这两个代码合并为一个登录。首先,我知道它会分开工作。
任何帮助将不胜感激,我提前为我的编码无知道歉。
干杯! 查看全部
vba xmlhttp 抓取网页(我是一家VR公司的实习生,因为我无法为狗屎编码)
我在 StackOverflow文章 上的第一篇文章,所以请放松我:)
我是一家 VR 公司的实习生,我正在尝试使用互联网搜索数据。我使用XMLHTTP成功提取了正确的数据(因为搜索的数据量很大),但是除非我登录,否则我会遇到无法读取信息的问题。
EG 搜索词:7980 Sunset Blvd 结果:公司 ***** ***** *****,***** *****。
如果我手动登录并搜索此位置,则可以通过星号检查所有信息。
我的问题是:如何通过 MSXML2.XMLHTTP(类似于 Google 登录表单的脚本)登录
研究了很多,遇到了这个问题文章,但是我不能把他例子的登录翻译成我的,因为我不会编码狗屎!哈哈
这是我用于网络爬行的工作代码:
Sub GetOwners()
Dim URL As String, lastRow As Long
Dim XMLHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
Dim var As String
Dim var1 As Object
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim cookie As String
Dim result_cookie As String
start_time = Time
Debug.Print "start_time:" & start_time
For i = 2 To lastRow
URL = "https://www.spokeo.com/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
Set XMLHttp = CreateObject("MSXML2.serverXMLHTTP")
XMLHttp.Open "GET", URL, False
XMLHttp.setRequestHeader "Content-Type", "text/xml"
XMLHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHttp.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHttp.responseText
Set objResultDiv = html.GetElementById("profile_selection")
Set var1 = html.GetElementById("property_owners")
Cells(i, 2).Activate
If html.GetElementById("property_owners") Is Nothing Then
Cells(i, 2).Value = "-"
Else
Cells(i, 2).Value = var1.innerText
End If
DoEvents
Next
end_time = Time
Debug.Print "end_time:" & end_time
Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
这是我的 Frankenstein 试图获取 Vitor Prado 的代码并申请我的申请:
Sub testXMLHTTP()
Dim xml As Object
Dim html As HTMLDocument
Dim dados As Object
Dim text As Object
Dim html2 As HTMLDocument
Dim xml2 As Object
Set xml = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html = CreateObject("htmlFile")
With xml
.Open "GET", "https://www.spokeo.com/login?", False
.send
End With
strCookie = xml.getResponseHeader("Set-Cookie")
html.body.innerHTML = xml.responseText
Set objvstate = html.GetElementById("__VIEWSTATE")
Set objvstategen = html.GetElementById("__VIEWSTATEGENERATOR")
Set objeventval = html.GetElementById("__EVENTVALIDATION")
vstate = objvstate.Value
vstategen = objvstategen.Value
eventval = objeventval.Value
'URL Encode ViewState
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function encode(vstate) {return encodeURIComponent(vstate);}"
Dim encoded As String
encoded = ScriptEngine.Run("encode", vstate)
vstate = encoded
'URL Encode Event Validation
ScriptEngine.AddCode "function encode(eventval) {return encodeURIComponent(eventval);}"
encoded = ScriptEngine.Run("encode", eventval)
eventval = encoded
'URL Encode ViewState Generator
ScriptEngine.AddCode "function encode(vstategen) {return encodeURIComponent(vstategen);}"
encoded = ScriptEngine.Run("encode", vstategen)
vstategen = encoded
Postdata = "__EVENTTARGET=" & "&__EVENTARGUMENT=" & "&__VIEWSTATE=" & vstate & "&__VIEWSTATEGENERATOR=" & vstategen & "&__EVENTVALIDATION=" & eventval & "&ctl00$ddlTipoUsuario=#rdBtnNaoContribuinte" & "&ctl00$UserNameAcessivel=Digite+o+Usuário" & "&ctl00$PasswordAcessivel=x" & "&ctl00$ConteudoPagina$Login1$rblTipo=rdBtnNaoContribuinte" & "&ctl00$ConteudoPagina$Login1$UserName=MYUSERNAME" & "&ctl00$ConteudoPagina$Login1$Password=MYPASSWORD" & "&ctl00$ConteudoPagina$Login1$Login=Acessar" & "&ctl00$ConteudoPagina$Login1$txtCpfCnpj=Digite+o+Usuário"
Set xml2 = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set html2 = CreateObject("htmlFile")
With xml2
.Open "POST", "https://www.spokeo.com/login?", False
.setRequestHeader "Cookie", strCookie
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Content-Lenght", Len(Postdata)
.send (Postdata)
End With
html2.body.innerHTML = xml2.responseText
Set objResult = html2.GetElementById("dadosDoUsuario")
GetElementById = objResult.innerText
MsgBox GetElementById
End Sub
有很多参考我没有完全改变,因为我不知道在哪里看。
我仍然会将这两个代码合并为一个登录。首先,我知道它会分开工作。
任何帮助将不胜感激,我提前为我的编码无知道歉。
干杯!
vba xmlhttp 抓取网页(使用ExcelVBA的方式获取搜索引擎官方、第三方网站的数据问题)
网站优化 • 优采云 发表了文章 • 0 个评论 • 149 次浏览 • 2021-09-26 10:28
vba xmlhttp 抓取网页(使用ExcelVBA的方式获取搜索引擎官方、第三方网站的数据问题)
一个SEO项目在执行过程中,通常需要查看数据报表来反映项目的表现,比如网站收录、域名PR、预估流量、Alexa排名等。本文将介绍使用VBA从网上抓取网站的基础数据的方法。通过建立自动化的数据上报系统,提高了SEO数据采集的效率。使用ExcelVBA从搜索引擎网站获取官方和第三方数据需要解决以下基本技术问题(更复杂的情况后面会讲,比如需要登录查询的情况等) .):1.如何在网页代码中查找目标数据(通过查看源代码,准确定位目标数据的位置)2. 使用VBA代码获取数据(使用Microsoft.XMLHTTP等对象)3.字符串处理获取目标数据(使用replace、split等函数进行处理) 这次我将演示如何使用VBA来编写自定义函数,从百度获取收录数据。其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据
使用百度中的site:命令返回查询结果。如上图所示,可以看到收录的数量为4,890,000。使用 Firefox 中的 Firebug 插件查看源代码。结果显示在蓝色块中,如下图所示。我们要采集的数据在网页的 HTML 代码中。
2.使用Microsoft.XMLHTTP对象获取网页数据,并使用split函数进行文本处理
上图为功能代码(源码见下),通过该方法可以快速查询目标网页的收录数据。首先定义URL参数作为函数的输入值,字符类型为String(字符串)类型;然后定义 htmlBody 变量来存储 网站 HTML 代码。接下来更重要的一步是定义和声明htmlObject对象,并使用With方法配置查询地址和原创数据的初步清理。Replace函数的作用是删除网页源代码中的回车换行(vbCrLf),方便下一步Split函数的处理。得到简单处理的网页数据后,得到网页HTML代码。此代码存储在 htmlBody 变量中,而我们要获取的收录数据就存储在其中。第一步,我们查看了网站的源代码,网站的收录的数量收录在这句话中:“找到的相关结果数为489万”。 , 使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。
至此,编写简单查询函数的过程基本结束。这种方式虽然省去了手动频繁查询数据的麻烦,但是使用函数获取数据的方法还是存在很多不便:1.函数维护成本比较高。百度或第三方网站的前端代码更新后,查询语句也需要做相应的修改。在使用中,偶尔会遇到需要更新拆分功能的情况。2. 批量自动化是不可能的。在做SEO项目时,我们需要查询各种数据,包括收录、PR、排名、BR等数据做周报或月报。通常收录收录很多不同的列,竞争对手的URL等。使用函数的方法在批量查询中仍然效率不高。当然还有一个解决方案,可以结合Excel表格控件,结合VBA代码,通过一键操作,完成项目周报数据的查询。要实现这样的功能需要更复杂的 VBA 代码。未来文章,我们会继续讨论。由于时间关系,一些技术细节没有过多解释。希望大家踊跃回复讨论。如果有对SEO数据分析感兴趣的朋友,欢迎讨论。======源代码======FunctionBaiduIndex(urlAsString)'定义函数名DimhtmlBody'定义字符串变量,用于存放网页源代码DimhtmlObjectAsObject'定义对象变量SethtmlObject=CreateObject("microsoft.xmlhttp") WithhtmlObject.Open"GET",":"&url,False' 查看全部
一个SEO项目在执行过程中,通常需要查看数据报表来反映项目的表现,比如网站收录、域名PR、预估流量、Alexa排名等。本文将介绍使用VBA从网上抓取网站的基础数据的方法。通过建立自动化的数据上报系统,提高了SEO数据采集的效率。使用ExcelVBA从搜索引擎网站获取官方和第三方数据需要解决以下基本技术问题(更复杂的情况后面会讲,比如需要登录查询的情况等) .):1.如何在网页代码中查找目标数据(通过查看源代码,准确定位目标数据的位置)2. 使用VBA代码获取数据(使用Microsoft.XMLHTTP等对象)3.字符串处理获取目标数据(使用replace、split等函数进行处理) 这次我将演示如何使用VBA来编写自定义函数,从百度获取收录数据。其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据
使用百度中的site:命令返回查询结果。如上图所示,可以看到收录的数量为4,890,000。使用 Firefox 中的 Firebug 插件查看源代码。结果显示在蓝色块中,如下图所示。我们要采集的数据在网页的 HTML 代码中。
2.使用Microsoft.XMLHTTP对象获取网页数据,并使用split函数进行文本处理
上图为功能代码(源码见下),通过该方法可以快速查询目标网页的收录数据。首先定义URL参数作为函数的输入值,字符类型为String(字符串)类型;然后定义 htmlBody 变量来存储 网站 HTML 代码。接下来更重要的一步是定义和声明htmlObject对象,并使用With方法配置查询地址和原创数据的初步清理。Replace函数的作用是删除网页源代码中的回车换行(vbCrLf),方便下一步Split函数的处理。得到简单处理的网页数据后,得到网页HTML代码。此代码存储在 htmlBody 变量中,而我们要获取的收录数据就存储在其中。第一步,我们查看了网站的源代码,网站的收录的数量收录在这句话中:“找到的相关结果数为489万”。 , 使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。
至此,编写简单查询函数的过程基本结束。这种方式虽然省去了手动频繁查询数据的麻烦,但是使用函数获取数据的方法还是存在很多不便:1.函数维护成本比较高。百度或第三方网站的前端代码更新后,查询语句也需要做相应的修改。在使用中,偶尔会遇到需要更新拆分功能的情况。2. 批量自动化是不可能的。在做SEO项目时,我们需要查询各种数据,包括收录、PR、排名、BR等数据做周报或月报。通常收录收录很多不同的列,竞争对手的URL等。使用函数的方法在批量查询中仍然效率不高。当然还有一个解决方案,可以结合Excel表格控件,结合VBA代码,通过一键操作,完成项目周报数据的查询。要实现这样的功能需要更复杂的 VBA 代码。未来文章,我们会继续讨论。由于时间关系,一些技术细节没有过多解释。希望大家踊跃回复讨论。如果有对SEO数据分析感兴趣的朋友,欢迎讨论。======源代码======FunctionBaiduIndex(urlAsString)'定义函数名DimhtmlBody'定义字符串变量,用于存放网页源代码DimhtmlObjectAsObject'定义对象变量SethtmlObject=CreateObject("microsoft.xmlhttp") WithhtmlObject.Open"GET",":"&url,False' 查看全部
vba xmlhttp 抓取网页(使用ExcelVBA的方式获取搜索引擎官方、第三方网站的数据问题)
一个SEO项目在执行过程中,通常需要查看数据报表来反映项目的表现,比如网站收录、域名PR、预估流量、Alexa排名等。本文将介绍使用VBA从网上抓取网站的基础数据的方法。通过建立自动化的数据上报系统,提高了SEO数据采集的效率。使用ExcelVBA从搜索引擎网站获取官方和第三方数据需要解决以下基本技术问题(更复杂的情况后面会讲,比如需要登录查询的情况等) .):1.如何在网页代码中查找目标数据(通过查看源代码,准确定位目标数据的位置)2. 使用VBA代码获取数据(使用Microsoft.XMLHTTP等对象)3.字符串处理获取目标数据(使用replace、split等函数进行处理) 这次我将演示如何使用VBA来编写自定义函数,从百度获取收录数据。其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据 其他基本的数据采集原理基本相同,暂不赘述。以新东方()为例,按照刚才提到的技术链接一一讲解。1.找到目标数据
使用百度中的site:命令返回查询结果。如上图所示,可以看到收录的数量为4,890,000。使用 Firefox 中的 Firebug 插件查看源代码。结果显示在蓝色块中,如下图所示。我们要采集的数据在网页的 HTML 代码中。
2.使用Microsoft.XMLHTTP对象获取网页数据,并使用split函数进行文本处理
上图为功能代码(源码见下),通过该方法可以快速查询目标网页的收录数据。首先定义URL参数作为函数的输入值,字符类型为String(字符串)类型;然后定义 htmlBody 变量来存储 网站 HTML 代码。接下来更重要的一步是定义和声明htmlObject对象,并使用With方法配置查询地址和原创数据的初步清理。Replace函数的作用是删除网页源代码中的回车换行(vbCrLf),方便下一步Split函数的处理。得到简单处理的网页数据后,得到网页HTML代码。此代码存储在 htmlBody 变量中,而我们要获取的收录数据就存储在其中。第一步,我们查看了网站的源代码,网站的收录的数量收录在这句话中:“找到的相关结果数为489万”。 , 使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。收录在句子中:“找到的相关结果数为 4,890,000。”,使用 split 函数。两次文本截取可以提取最终的收录数量。Split功能的使用请自行百度。至此,我们就完成了一个简单的收录查询功能。在Excel中使用时,只需在任意单元格中输入“=baiduIndex("")”,回车后收录数据将自动返回到表格中。
至此,编写简单查询函数的过程基本结束。这种方式虽然省去了手动频繁查询数据的麻烦,但是使用函数获取数据的方法还是存在很多不便:1.函数维护成本比较高。百度或第三方网站的前端代码更新后,查询语句也需要做相应的修改。在使用中,偶尔会遇到需要更新拆分功能的情况。2. 批量自动化是不可能的。在做SEO项目时,我们需要查询各种数据,包括收录、PR、排名、BR等数据做周报或月报。通常收录收录很多不同的列,竞争对手的URL等。使用函数的方法在批量查询中仍然效率不高。当然还有一个解决方案,可以结合Excel表格控件,结合VBA代码,通过一键操作,完成项目周报数据的查询。要实现这样的功能需要更复杂的 VBA 代码。未来文章,我们会继续讨论。由于时间关系,一些技术细节没有过多解释。希望大家踊跃回复讨论。如果有对SEO数据分析感兴趣的朋友,欢迎讨论。======源代码======FunctionBaiduIndex(urlAsString)'定义函数名DimhtmlBody'定义字符串变量,用于存放网页源代码DimhtmlObjectAsObject'定义对象变量SethtmlObject=CreateObject("microsoft.xmlhttp") WithhtmlObject.Open"GET",":"&url,False'
vba xmlhttp 抓取网页(从我一直使用的:我正在寻找一种方法来抓取网页2)
网站优化 • 优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-09-24 04:09
vba xmlhttp 抓取网页(从我一直使用的:我正在寻找一种方法来抓取网页2)
从我一直在使用的:
Url$ = "www.somewebpage.com"
Dim Http As New XMLHTTP60, worldData As Object, S$
With Http
.Open "GET", Url, False
.send
S = .responseText
End With
1)我正在寻找一种抓取网页的方法2)从第一个节点的javascript(请注意javascripts可能实际上并不存在)寻找一种从网页抓取数据数组的方法((如图所示)下面)方法,然后是节点内第一个值的坐标......我想返回下面的例子。我将如何开始:
With CreateObject("VBScript.RegExp")
.Pattern = "?????"
Set worldData = .Execute(S)
If worldData.Count > 0 Then
'here to loop and create/assing into arrays
End If
End With
网页上的数据:
var g_mapperData = {
40: {
'0': {
count: 3,
coords: [
[45.2,69.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[45.5,69.5,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[44.8,68,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
12: {
'0': {
count: 1,
coords: [
[48.4,86.61,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
3524: {
'0': {
count: 2,
coords: [
[48.2,70.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[46.1,70.7,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
}
};
数组的预期结果:
MapID = {40, 12, 3524}
Xcoord = {45.2, 48.4, 48.2}
Ycoord = {69.9, 86.61, 70.9}
每个数组应该始终具有相同的值长度,因为每个“MapID”中至少有一个 X/Y 记录(可以更多,甚至多达数百个),而 MapID 可以只有一个甚至数百个。
谢谢巫师的魔法 查看全部
从我一直在使用的:
Url$ = "www.somewebpage.com"
Dim Http As New XMLHTTP60, worldData As Object, S$
With Http
.Open "GET", Url, False
.send
S = .responseText
End With
1)我正在寻找一种抓取网页的方法2)从第一个节点的javascript(请注意javascripts可能实际上并不存在)寻找一种从网页抓取数据数组的方法((如图所示)下面)方法,然后是节点内第一个值的坐标......我想返回下面的例子。我将如何开始:
With CreateObject("VBScript.RegExp")
.Pattern = "?????"
Set worldData = .Execute(S)
If worldData.Count > 0 Then
'here to loop and create/assing into arrays
End If
End With
网页上的数据:
var g_mapperData = {
40: {
'0': {
count: 3,
coords: [
[45.2,69.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[45.5,69.5,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[44.8,68,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
12: {
'0': {
count: 1,
coords: [
[48.4,86.61,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
3524: {
'0': {
count: 2,
coords: [
[48.2,70.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[46.1,70.7,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
}
};
数组的预期结果:
MapID = {40, 12, 3524}
Xcoord = {45.2, 48.4, 48.2}
Ycoord = {69.9, 86.61, 70.9}
每个数组应该始终具有相同的值长度,因为每个“MapID”中至少有一个 X/Y 记录(可以更多,甚至多达数百个),而 MapID 可以只有一个甚至数百个。
谢谢巫师的魔法 查看全部
vba xmlhttp 抓取网页(从我一直使用的:我正在寻找一种方法来抓取网页2)
从我一直在使用的:
Url$ = "www.somewebpage.com"
Dim Http As New XMLHTTP60, worldData As Object, S$
With Http
.Open "GET", Url, False
.send
S = .responseText
End With
1)我正在寻找一种抓取网页的方法2)从第一个节点的javascript(请注意javascripts可能实际上并不存在)寻找一种从网页抓取数据数组的方法((如图所示)下面)方法,然后是节点内第一个值的坐标......我想返回下面的例子。我将如何开始:
With CreateObject("VBScript.RegExp")
.Pattern = "?????"
Set worldData = .Execute(S)
If worldData.Count > 0 Then
'here to loop and create/assing into arrays
End If
End With
网页上的数据:
var g_mapperData = {
40: {
'0': {
count: 3,
coords: [
[45.2,69.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[45.5,69.5,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[44.8,68,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
12: {
'0': {
count: 1,
coords: [
[48.4,86.61,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
},
3524: {
'0': {
count: 2,
coords: [
[48.2,70.9,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}],
[46.1,70.7,{label:'$2$1
Respawn: 2min
Phase: 1
$3',type: '0'}]
]
}
}
};
数组的预期结果:
MapID = {40, 12, 3524}
Xcoord = {45.2, 48.4, 48.2}
Ycoord = {69.9, 86.61, 70.9}
每个数组应该始终具有相同的值长度,因为每个“MapID”中至少有一个 X/Y 记录(可以更多,甚至多达数百个),而 MapID 可以只有一个甚至数百个。
谢谢巫师的魔法
vba xmlhttp 抓取网页(获取网页数据链接、识别汉字编码、转换和处理字符串并得到所需要的简单方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 190 次浏览 • 2021-09-18 05:00
vba xmlhttp 抓取网页(获取网页数据链接、识别汉字编码、转换和处理字符串并得到所需要的简单方法)
第1课小结:
通过一个示例,本课程介绍获取网页数据链接、识别汉字编码、转换和处理字符串以及获取所需数据的简单方法。下课后,请找到网站更多的测试和练习如何使用数据包捕获软件以及获取字符串后使用split等函数提取数据的基本技能
在实际的网页采集中,我们经常会遇到比示例复杂几倍甚至几十倍的网页网站. 完整的web采集程序需要处理以下问题:
1、如有必要,登录至网站。可能需要验证码(需要图像采集和OCR识别)
2、找到网站的初始链接,并获取隐藏的提交信息,如Cookie或viewstate,以准备提交真实的数据链接
3、如有必要,查找网站中文的设置方法,可以直接写入链接、提交的参数中,或在特殊语言设置链接提交中
4、找到网站的数据链,抓取包裹,获取参考值,解防盗链
5、处理初始网页并获取后续数据链接提交所需的参数(可能没有或很多)
6、处理网站数据链路的提交参数(可能有时间戳),该参数可能处于get模式或post模式。后者还处理URLEncode编码或其他形式的编码(在UTF-8编码的情况下,xmlhttp将自行处理;winhttp可以通过参数选择URL编码的格式)
7、判断网站返回数据的编码,并将其处理为可识别的字符串(可能需要htmlfile对象来快速操作HTML文档中的表等)
8、处理需要采集数据的字符串。可以从中提取页码,可以提取下一页的参数,并且可以以数组的形式提取所需信息(特别是对于网页表)
9、循环6~8,直到完成数据提取
事实上,不管网站有多复杂,获取数据的基础只不过是两点:
1、捕获数据包,查看链接、cookie、引用、post参数、隐藏提交参数、MD5或RSA加密参数等,然后模拟提交
2、进程编码和提取字符串
只要你掌握了这两个基本步骤,再加上充足的时间、坚定的信念、充分的耐心和一点运气,网页采集的工作就会很容易解决
相信我
文中还介绍了用VBA调用JS函数的几种方法 查看全部
第1课小结:
通过一个示例,本课程介绍获取网页数据链接、识别汉字编码、转换和处理字符串以及获取所需数据的简单方法。下课后,请找到网站更多的测试和练习如何使用数据包捕获软件以及获取字符串后使用split等函数提取数据的基本技能
在实际的网页采集中,我们经常会遇到比示例复杂几倍甚至几十倍的网页网站. 完整的web采集程序需要处理以下问题:
1、如有必要,登录至网站。可能需要验证码(需要图像采集和OCR识别)
2、找到网站的初始链接,并获取隐藏的提交信息,如Cookie或viewstate,以准备提交真实的数据链接
3、如有必要,查找网站中文的设置方法,可以直接写入链接、提交的参数中,或在特殊语言设置链接提交中
4、找到网站的数据链,抓取包裹,获取参考值,解防盗链
5、处理初始网页并获取后续数据链接提交所需的参数(可能没有或很多)
6、处理网站数据链路的提交参数(可能有时间戳),该参数可能处于get模式或post模式。后者还处理URLEncode编码或其他形式的编码(在UTF-8编码的情况下,xmlhttp将自行处理;winhttp可以通过参数选择URL编码的格式)
7、判断网站返回数据的编码,并将其处理为可识别的字符串(可能需要htmlfile对象来快速操作HTML文档中的表等)
8、处理需要采集数据的字符串。可以从中提取页码,可以提取下一页的参数,并且可以以数组的形式提取所需信息(特别是对于网页表)
9、循环6~8,直到完成数据提取
事实上,不管网站有多复杂,获取数据的基础只不过是两点:
1、捕获数据包,查看链接、cookie、引用、post参数、隐藏提交参数、MD5或RSA加密参数等,然后模拟提交
2、进程编码和提取字符串
只要你掌握了这两个基本步骤,再加上充足的时间、坚定的信念、充分的耐心和一点运气,网页采集的工作就会很容易解决
相信我
文中还介绍了用VBA调用JS函数的几种方法 查看全部
vba xmlhttp 抓取网页(获取网页数据链接、识别汉字编码、转换和处理字符串并得到所需要的简单方法)
第1课小结:
通过一个示例,本课程介绍获取网页数据链接、识别汉字编码、转换和处理字符串以及获取所需数据的简单方法。下课后,请找到网站更多的测试和练习如何使用数据包捕获软件以及获取字符串后使用split等函数提取数据的基本技能
在实际的网页采集中,我们经常会遇到比示例复杂几倍甚至几十倍的网页网站. 完整的web采集程序需要处理以下问题:
1、如有必要,登录至网站。可能需要验证码(需要图像采集和OCR识别)
2、找到网站的初始链接,并获取隐藏的提交信息,如Cookie或viewstate,以准备提交真实的数据链接
3、如有必要,查找网站中文的设置方法,可以直接写入链接、提交的参数中,或在特殊语言设置链接提交中
4、找到网站的数据链,抓取包裹,获取参考值,解防盗链
5、处理初始网页并获取后续数据链接提交所需的参数(可能没有或很多)
6、处理网站数据链路的提交参数(可能有时间戳),该参数可能处于get模式或post模式。后者还处理URLEncode编码或其他形式的编码(在UTF-8编码的情况下,xmlhttp将自行处理;winhttp可以通过参数选择URL编码的格式)
7、判断网站返回数据的编码,并将其处理为可识别的字符串(可能需要htmlfile对象来快速操作HTML文档中的表等)
8、处理需要采集数据的字符串。可以从中提取页码,可以提取下一页的参数,并且可以以数组的形式提取所需信息(特别是对于网页表)
9、循环6~8,直到完成数据提取
事实上,不管网站有多复杂,获取数据的基础只不过是两点:
1、捕获数据包,查看链接、cookie、引用、post参数、隐藏提交参数、MD5或RSA加密参数等,然后模拟提交
2、进程编码和提取字符串
只要你掌握了这两个基本步骤,再加上充足的时间、坚定的信念、充分的耐心和一点运气,网页采集的工作就会很容易解决
相信我
文中还介绍了用VBA调用JS函数的几种方法