代码之家  ›  专栏  ›  技术社区  ›  Mr. Ivan

如何在bltindex.com上从折线图中提取数据?

  •  1
  • Mr. Ivan  · 技术社区  · 1 年前

    我想从上唯一的折线图中提取数据 https://www.bltindex.com/
    目标是最终拥有一个pandas DataFrame,其中包含图表中的一个时间序列

    看完之后 this video 当页面加载时,我试图应用相同的方法,并在页面的网络中查找一些csv或json文件,但找不到任何文件。我发现的唯一一件事是一个css文件,其中有一个带有链接的单词“chart” https://docs.google.com/static/spreadsheets2/client/css/838001818-v3-ritz_chart_css_ltr.css 并看到它也有一个请求链接(在下面的代码中)
    我尝试了以下代码:

    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQG9TYlv8_LpCvO7EI3Y3s8MoxQEfOHTd3-EqccN5PoeHcdxraxZC0y8UWFx_2NnogVIIuk1i-phvFe/pubchart?oid=813038046&format=interactive'
    html = requests.get(url)
    
    soup = BeautifulSoup(html.content)
    print(soup.prettify())
    

    代码返回了一个字符串,并且在 <script nonce="yyTSUqBQUPTxI-ZkIM7OKw"> 我确实看到了我想要得到的价值观。然而,如果不手动操作,我不知道如何从这个字符串中获取它们。有没有更方便的方法来获取数据?

    1 回复  |  直到 1 年前
        1
  •  0
  •   Andrej Kesely    1 年前

    尝试

    import json
    import re
    
    import pandas as pd
    import requests
    from bs4 import BeautifulSoup
    
    url = "https://docs.google.com/spreadsheets/d/e/2PACX-1vQG9TYlv8_LpCvO7EI3Y3s8MoxQEfOHTd3-EqccN5PoeHcdxraxZC0y8UWFx_2NnogVIIuk1i-phvFe/pubchart?oid=813038046&format=interactive"
    html_text = requests.get(url).text
    
    
    data = re.search(r"'chartJson': '(.*?)',", html_text).group(1)
    data = re.sub(r"\\x(..)", lambda g: chr(int(g.group(1), 16)), data)
    data = json.loads(data)
    
    # print(json.dumps(data, indent=4))
    
    df = pd.DataFrame(
        [(r["c"][0]["f"], r["c"][1]["f"]) for r in data["dataTable"]["rows"]],
        columns=["Date", "Value"],
    )
    print(df)
    

    打印:

                Date       Value
    0    07-Jan-2018           1
    1    14-Jan-2018   1.0396913
    2    21-Jan-2018  0.84593582
    3    28-Jan-2018  0.78201258
    4    04-Feb-2018  0.71397352
    5    11-Feb-2018   0.8097111
    6    18-Feb-2018   1.2938001
    7    25-Feb-2018  0.95799756
    8    04-Mar-2018  0.81667918
    
    ...
    
    推荐文章