如何从网站上删除措辞信息?

时间:2016-08-25 13:37:22

标签: excel vba scrape

我是VBA和html编码的新手。如果我不理解基本术语或使用不正确,我会道歉。我希望在excel中创建并运行一个宏来完成工作,这将使我的工作变得更加容易。从本质上讲,我需要从房地产网站上获取大量信息。这包括地址,标价,上市代理,拍卖日期(如果有的话)等。我花了最后4个小时阅读所有关于网页抓取的内容,我理解这些过程,我只是不知道如何编码。根据我的阅读,我需要编写一个代码来自动打开网站,强行等待它加载,然后通过标签,名称或ID检索信息。它是否正确?我怎么能这样做呢。我应该使用哪些资源。

TL; DR如何从搜索结果的网页上抓取文本(noob说明)。

2 个答案:

答案 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