Соскребание текста из файла в тегах HTML - PullRequest
1 голос
/ 18 марта 2012

У меня есть файл, из которого я хочу извлечь даты, это исходный файл HTML, поэтому в нем полно кода и фраз, которые мне не нужны. Мне нужно извлечь каждый экземпляр даты, завернутый в определенный тег HTML:

abbr title = "((это текст, который мне нужен))" data-utime = "

Какой самый простой способ добиться этого?

Ответы [ 2 ]

6 голосов
/ 18 марта 2012

Если вы используете Excel VBA, установите ссылку (Инструменты - Ссылки) на библиотеку MSHTML (озаглавленную Microsoft HTML Object Library в справочном меню)

Sub ScrapeDateAbbr()

    Dim hDoc As MSHTML.HTMLDocument
    Dim hElem As MSHTML.HTMLGenericElement
    Dim sFile As String, lFile As Long
    Dim sHtml As String

    'read in the file
    lFile = FreeFile
    sFile = "C:/Users/dick/Documents/My Dropbox/Excel/Testabbr.html"
    Open sFile For Input As lFile
    sHtml = Input$(LOF(lFile), lFile)

    'put into an htmldocument object
    Set hDoc = New MSHTML.HTMLDocument
    hDoc.body.innerHTML = sHtml

    'loop through abbr tags
    For Each hElem In hDoc.getElementsByTagName("abbr")
        'only those that have a data-utime attribute
        If Len(hElem.getAttribute("data-utime")) > 0 Then
            'get the title attribute
            Debug.Print hElem.getAttribute("title")
        End If
    Next hElem

End Sub

Я предположил, что файл был локальным, поскольку вывызывается в исходном файле.Если вам нужно сначала загрузить его, вам потребуется еще одна ссылка на MSXML и этот код

Sub ScrapeDateAbbrDownload()

    Dim xHttp As MSXML2.XMLHTTP
    Dim hDoc As MSHTML.HTMLDocument
    Dim hElem As MSHTML.HTMLGenericElement

    Set xHttp = New MSXML2.XMLHTTP
    xHttp.Open "GET", "file:///C:/Users/dick/Documents/My%20Dropbox/Excel/Testabbr.html"
    xHttp.send

    Do
        DoEvents
    Loop Until xHttp.readyState = 4

    'put into an htmldocument object
    Set hDoc = New MSHTML.HTMLDocument
    hDoc.body.innerHTML = xHttp.responseText

    'loop through abbr tags
    For Each hElem In hDoc.getElementsByTagName("abbr")
        'only those that have a data-utime attribute
        If Len(hElem.getAttribute("data-utime")) > 0 Then
            'get the title attribute
            Debug.Print hElem.getAttribute("title")
        End If
    Next hElem

End Sub
0 голосов
/ 18 марта 2012

если вы используете Java, вы можете использовать Jsoup . Это не ясно из вашего вопроса, пожалуйста, уточните, что именно вы пытаетесь сделать

...