Scraping specific data inside a table II

后端 未结 2 865
感动是毒
感动是毒 2021-01-27 18:11

I hate that I have to ask this question again but the website I had been scraping data from updated, not just aesthetically, the underlying code has changed too. Before the upd

2条回答
  •  一整个雨季
    2021-01-27 18:44

    You can get the value of eps using xmlhttp requests if you send a post requests to the correct url along with appropriate parameters. When you run the script, you should get json response containing the required result. I used regex to parse the specific portion you are interested in.

    The payload is bigger than usual. However, you can change the ticker name within the variable accordingly.

    This is how you can go:

    Sub GetContent()
        Const link = "https://app-money.tmx.com/graphql"
        Dim elem As Object, payload As Variant, S$, tickerName$
        
        tickerName = "AAPL:US"      'use ticker name here
    
        payload = "{""operationName"":""getQuoteBySymbol"",""variables"":{""symbol"":""" & tickerName & """,""locale"":""en""},""query"":""query getQuoteBySymbol($symbol: String, $locale: String) {\n  getQuoteBySymbol(symbol: $symbol, locale: $locale) {\n    symbol\n    name\n    price\n    priceChange\n    percentChange\n    exchangeName\n    exShortName\n    exchangeCode\n    marketPlace\n    sector\n    industry\n    volume\n    openPrice\n    dayHigh\n    dayLow\n    MarketCap\n" & _
                "MarketCapAllClasses\n    peRatio\n    prevClose\n    dividendFrequency\n    dividendYield\n    dividendAmount\n    dividendCurrency\n    beta\n    eps\n    exDividendDate\n    shortDescription\n    longDescription\n    website\n    email\n    phoneNumber\n    fullAddress\n    employees\n    shareOutStanding\n    totalDebtToEquity\n    totalSharesOutStanding\n    sharesESCROW\n    vwap\n    dividendPayDate\n    weeks52high\n    weeks52low\n    alpha\n    averageVolume10D\n    averageVolume30D\n    averageVolume50D\n    priceToBook\n    priceToCashFlow\n    returnOnEquity\n" & _
                "returnOnAssets\n    day21MovingAvg\n    day50MovingAvg\n    day200MovingAvg\n    dividend3Years\n    dividend5Years\n    datatype\n    __typename\n  }\n}\n""}"
    
        With CreateObject("MSXML2.XMLHTTP")
            .Open "POST", link, False
            .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"
            .setRequestHeader "Content-Type", "application/json"
            .send payload
            S = .responseText
        End With
        
        With CreateObject("VBScript.RegExp")
            .Global = True
            .MultiLine = True
    
            .Pattern = """eps"":(.*?),"
            Set elem = .Execute(S)
            MsgBox elem(0).SubMatches(0)
        End With
    End Sub
    

提交回复
热议问题