我是VBA和html编码的新手。如果我不理解基本术语或使用不正确,我会道歉。我希望在excel中创建并运行一个宏来完成工作,这将使我的工作变得更加容易。从本质上讲,我需要从房地产网站上获取大量信息。这包括地址,标价,上市代理,拍卖日期(如果有的话)等。我花了最后4个小时阅读所有关于网页抓取的内容,我理解这些过程,我只是不知道如何编码。根据我的阅读,我需要编写一个代码来自动打开网站,强行等待它加载,然后通过标签,名称或ID检索信息。它是否正确?我怎么能这样做呢。我应该使用哪些资源。
TL; DR如何从搜索结果的网页上抓取文本(noob说明)。
答案 0 :(得分:0)
我不会告诉你所有的细节,你必须自己找到它们。有些网页很复杂,有些很容易。其他是不可能的,特别是如果文本不是以HTML格式显示,而是以其他形式显示 - 图片,Flash等。
然而,从Excel中的HTML网页中提取数据非常简单。首先,您想要自动化它。所以点击“记录宏”'在开发者'带。这样,您将记录所有可重现的步骤,然后您可以查看宏,调整一些步骤以满足您的需要。但是我不能在这里教你如何编程VBA。
当您的宏被录制时,请点击“来自网络”'在'数据'带。这将显示一个新的Web查询。然后输入您要阅读的网页的地址,并尝试选择(使用小箭头或勾选标记)尽可能缩小您感兴趣的区域。您还可以在此向导对话框中浏览一些微调选项。
完成后,点击'导入'并且您将以某种形式拥有网页的内容。如果幸运的话,您感兴趣的数据将始终位于相同的单元格中。然后,您可以读取单元格并将值存储在某处(可能使用另一个宏)。如果每次刷新查询时数据都不在同一个单元格中,那么运气不好,必须使用一些复杂的公式或宏来查找它们。
接下来停止正在录制的宏并查看录制的代码。尝试尝试并玩它,直到你发现你真正需要的东西。然后由您决定,如何自动化它。选项很多......
否则Excel可能不是最好的工具。如果我想加载HTML页面并从中提取数据,我会使用一些脚本,例如Python比Excel和VBA有更好的工具。还有一些工具可以将HTML转换为XHTML,然后从格式良好的XML中提取数据。
答案 1 :(得分:0)
下面是一个非常基本的例子,说明了网络抓取的一些概念。您应该做的其他阅读将是如何使用其他元素选择器,例如getElementByID
getElementByClassName
getElementByName
。
以下是一些可以帮助您入门的代码。
Public Sub ExampleWebScraper()
Dim Browser As Object: Set Browser = CreateObject("InternetExplorer.Application")
Dim Elements As Object 'Will hold all the elements in a collection
Dim Element As Object 'Our iterator that will show us the properties
'Open a page and wait for it to load
With Browser
.Visible = True
.Navigate "www.google.com"
'Wait for the page to load
While .busy Or .readystate <> 4
Application.Wait (Now() + TimeValue("00:00:01"))
Wend
'Enumerate all Elements on the page
'It will store these elements into a collection which we can
'iterate over. The * is the key for ALL, here you can specify
'any tagName and it will limit your search to just those.
'E.g. the most common is Likely Input
Set Elements = .document.getElementsByTagname("*") ' All elements
'Iterate through all elements, and print out some properties
For Each Element In Elements
On Error Resume Next ' This is needed as not all elements have the properties below
' if you try and return a property that doesn't exist for that element
' you will receive an error
'The following information will be output to the 'Immediate Window'
'If you don't see this window, Press Ctrl+G, and it will pop up. That's where this info will display
Debug.Print "The Inner Text is: " & Element.InnerText
Debug.Print "The Value is: " & Element.Value
Debug.Print "The Name is: " & Element.Name
Debug.Print "The ID is: " & Element.ID
Debug.Print "The ClassName is: " & Element.Class
Next Element
End With
'Clean up, free memory
Set Browser = Nothing
Set Elements = Nothing
Set Element = Nothing
End Sub