Saya mencoba menarik satu nomor unik dari masing-masing set halaman web yang serupa. Semuanya sangat mirip, tetapi kode saat ini yang saya gunakan menggunakan MSXML2.XMLHTTP dan mengidentifikasi teks dalam kelas atau tag tertentu.

Masalahnya adalah halaman web ini sedikit berbeda, sehingga kode tidak dapat ditarik dengan andal dari semuanya berdasarkan kriteria Item. Dan, ada banyak kelas dan tag yang sama di halaman sehingga tidak ada yang unik untuk diidentifikasi.

Namun, ada teks unik ("Kode ISIN:"), dan kemudian nomor ISIN yang saya inginkan mengikuti di baris berikutnya. Saya telah mendengar tentang penguraian berdasarkan Id tetapi tidak dapat menemukan ini/tidak tahu cara kerja pendekatan ini.

Informasi yang ingin saya tarik adalah "GB00B6Y7NF43":

<tr>
    <th class="align-left">ISIN code:</th>
    <td> GB00B6Y7NF43 </td>
</tr>

Ini adalah sebagian besar kode yang saya gunakan sekarang untuk menemukan beberapa informasi lain di halaman menggunakan pendekatan Item(...). Saya tidak tahu apakah kode saya cukup benar, tetapi sejauh ini ia menarik informasi dengan benar jika Anda menentukan dengan Item(0) atau Item(1) dll.

Dim request As Object
Dim response As String
Dim html As New HTMLDocument
Dim td As Object
Dim website As String
Dim charge As Variant

With Worksheets("Sheet1")

website = Range("A14").Value

End With

Set request = CreateObject("MSXML2.XMLHTTP")

request.Open "GET", website, False

request.send

response = StrConv(request.responseBody, vbUnicode)

html.body.innerHTML = response

Worksheets("Information").Activate

        r = r + 2:
        Cells(r, 3) = html.getElementsByClassName("header-row").Item(0).innerText
        Cells(r, 5) = html.getElementsByTagName("td").Item(0).innerText
        Cells(r, 4) = html.getElementsByClassName("icon-link pdf-icon").Item(1).href

Apakah ada pendekatan/gaya pengkodean/Tweak lain pada kode saya untuk melakukan ini?

Saya bisa menggunakan dim ie / appIe dan metode serupa tetapi sejauh ini lebih rumit dan lebih lambat di pc daripada hanya bekerja melalui teks html.

1
user15881 29 Oktober 2019, 14:51

1 menjawab

Jawaban Terbaik

Ini adalah anak terakhir dalam tabel sehingga Anda dapat melakukan panggilan lastchild

html.querySelector("[summary='More fund information']").children(0).lastchild.lastchild.innertext

Begitu

Option Explicit
Public Sub test()
    Dim html As HTMLDocument

    Set html = New HTMLDocument

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.hl.co.uk/funds/fund-discounts,-prices--and--factsheets/search-results/f/fidelity-asia-class-w-accumulation/key-features", False
        .send
        html.body.innerHTML = .responseText
    End With
    Debug.Print html.querySelector("[summary='More fund information'] ").Children(0).LastChild.LastChild.innerText
End Sub

Metode yang lebih lambat tetapi mungkin lebih kuat dari waktu ke waktu adalah mengumpulkan header tabel dan menemukan header dengan teks ISIN yang diinginkan, lalu mengambil node NextSibling (td).

Option Explicit
Public Sub test()
    Dim html As HTMLDocument

    Set html = New HTMLDocument

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.hl.co.uk/funds/fund-discounts,-prices--and--factsheets/search-results/f/fidelity-asia-class-w-accumulation/key-features", False
        .send
        html.body.innerHTML = .responseText
    End With

    Dim i As Long, nodes As Object

    Set nodes = html.querySelectorAll("[summary='More fund information'] th")
    For i = 0 To nodes.Length - 1
        If nodes.Item(i).innerText = "ISIN code:" Then
            Debug.Print nodes.Item(i).NextSibling.innerText
            Exit For
        End If
    Next
End Sub
0
QHarr 29 Oktober 2019, 22:09