AMcoder - javascript, python, java, html, php, sql

Տվյալների արդյունահանում span itemprop-ից վեբ էջի վրա

Ես փորձում եմ կառուցել վեբ քերիչ՝ օգտագործելով vba. Ես ուզում եմ տվյալների (փողոցի հասցե, փոստային ինդեքս և տեղանք) հանել կայքից աշխատանքային թերթ, բայց խնդիրներ ունեմ:

<li id="ctl00_ctl00_cphMain_cphMainCol_CompanyDetailsInfoData1_liAddress" class="i-location" itemprop="address" itemscope="" itemtype="http://schema.org/Address">

                        <a href="javascript:void(0);" id="ctl00_ctl00_cphMain_cphMainCol_CompanyDetailsInfoData1_aShowOnMap" onclick="openMapTis(517648, 57522, 'KOVINARSTVO IVANETIČ d.o.o.|Omota    8 |Semič');">
                            <span itemprop="street-address">Omota    8</span>, <span itemprop="settlement">Omota</span>, <span itemprop="postal-code">8333</span> <span itemprop="locality">Semič</span>
                        </a>
                    </li>

Sub CompanyData()

Dim ie As InternetExplorer
Dim ht As HTMLDocument

Set ie = New InternetExplorer
ie.Visible = True

'searching web address

ie.navigate ("https://www.bizi.si")

Do Until ie.readyState = READYSTATE_COMPLETE
     DoEvents
Loop

'searching company

Set ht = ie.document

ht.getElementsByTagName("Input").Item("ctl00$Search1$tbSearchWhat").Value = ThisWorkbook.Sheets("Podatki").Range("A1").Value

'click on search result

Set elems = ht.getElementsByTagName("a")

For Each elem In elems
    If elem.className = "i-search" Then
       elem.Click
       Exit For
    End If
Next

Application.Wait (Now + TimeValue("0:00:06"))

Set AllHyperLinks = ht.getElementsByTagName("a")

For Each hyper_link In AllHyperLinks

        If hyper_link.innerText = Range("A1").Value Then
            hyper_link.Click
            Exit For
    End If
Next

Application.Wait (Now + TimeValue("0:00:06"))

gf = ht.getElementsByTagName("span")(0).innerText
gf = Range("B2")



End Sub

Ես ուզում եմ տվյալների (փողոցի հասցե, փոստային ինդեքս և տեղանք) հանել կայքից աշխատաթերթ:

02.09.2019

  • Դուք պետք է ավելի մանրամասն բացատրեք, թե կոնկրետ ինչ խնդիրներ ունեք։ Որտե՞ղ է ձեր կոդում առաջանում խնդիրը: Ո՞րն է սխալի հաղորդագրությունը, եթե այդպիսիք կա, որ տրված է: Խնդրի որքա՞ն ուսումնասիրություն եք կատարել ինքներդ (օրինակ՝ ձեր կոդի մեջ debug.print հայտարարություններ տեղադրելով): Սրանք մեծ օգնություն կլինեն ձեր ընթերցողներին և նշանակում են, որ նրանք ավելի ունակ և պատրաստակամ են օգնելու ձեզ: 02.09.2019
  • Խնդիրը սկսվում է gf = ht.getElementsByTagName(span)(0).innerText gf = Range(B2) Ես ուզում եմ տվյալներ հանել excel թերթից: Այս նախադասությունը լավ է աշխատում: 02.09.2019
  • Ինչումն է խնդիրը? Սխա՞լ եք ստանում: Տպե՞լ եք gfը՝ տեսնելու, թե ինչ է պարունակում: Արդյո՞ք դա այն է, ինչ դուք ակնկալում եք, որ այն լինի: Բացի այդ, եթե դուք փորձում եք տվյալներ արտահանել Excel-ի համար, այն պետք է լինի Range("B2").value = gf և ոչ թե հակառակը: 02.09.2019
  • Ես փոխվեցի այնպես, ինչպես դուք առաջարկեցիք (Range(B2).value = gf) - thanx և այժմ ես որոշակի արդյունքներ եմ ստանում, բայց այս տվյալները սխալ են: ‹span itemprop=street-address›Omota 8‹/span› - թերթիկի վրա պետք է լինի Omota 8-ի արդյունքը 02.09.2019

Պատասխանները:


1

Էջը իրականում կառուցում է queryString url՝ օգտագործելով ընկերության անվանումը. Այսպիսով, դուք միայն պետք է ավելացնեք ընկերության անունը բազային url-ի վերջում (այլ ոչ թե մուտքագրեք էջի վրա): Կարող եք նաև պարզապես օգտագործել xhr, այլ ոչ թե դանդաղ բրաուզեր (և url-ը կոդավորում է ընկերության անվանումը):

Ես օգտագործում եմ css ընտրիչներ՝ համապատասխան աղյուսակի տարրերին համապատասխանելու համար հասցեն. css ընտրիչները կիրառվում են querySelector մեթոդի միջոցով HTMLDocument:

Regex-ը պարզապես լարերը մաքրելու համար է՝ ավելորդ բաց տարածությունը հեռացնելու համար:


Internet Explorer՝

Option Explicit

Public Sub CompanyData()
    Dim ws As Worksheet, re As Object

    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "\s{2,}"
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    With CreateObject("InternetExplorer.Application")

        .Visible = True
        .Navigate2 "https://www.bizi.si/iskanje?q=" & ws.Range("A1").Value

        While .Busy Or .readyState <> 4: DoEvents: Wend

        ws.Range("B1").Value = re.Replace(Join$(Array(.document.querySelector("td.item a").innerText, .document.querySelector("td.item + td.item").innerText), ", "), Chr$(32))

        .Quit
    End With
End Sub

https://codingislove.com/http-requests-excel-vba/

Public Sub CompanyData2()
    Dim html As HTMLDocument, ws As Worksheet, re As Object

    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "\s{2,}"
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set html = New HTMLDocument
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.bizi.si/iskanje?q=" & Application.EncodeURL(ws.Range("A1").Value), False
        .send
        html.body.innerHTML = .responseText
    End With
    ws.Range("B1").Value = re.Replace(Join$(Array(html.querySelector("td.item a").innerText, html.querySelector("td.item + td.item").innerText), ", "), Chr$(32))
End Sub

Հղումներ (VBE > Գործիքներ > Հղումներ).

  1. Microsoft HTML օբյեկտների գրադարան
02.09.2019
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..