将 HTML 输出转换为表格时出现问题

问题描述 投票:0回答:1

我需要从此链接中抓取数据:https://flo.uri.sh/visualization/15396850/embed?auto=1

这是我的Python代码:

import pandas as pd
import html.parser
import requests
import urllib.request
from selenium import webdriver

base_url = "https://flo.uri.sh/visualisation/15396850/embed?auto=1"


class MyParser(html.parser.HTMLParser):

    def __init__(self, html):
        self.matches = []
        self.match_count = 0
        super().__init__()        

    def handle_data(self, data):
        self.matches.append(data)
        self.match_count += 1

    def handle_starttag(self, tag, attrs):
        attrs = dict(attrs)
        if tag == "div":
            if attrs.get("fl-layout-primary-container"):
                self.handle_data()
        else: return
        
url = base_url.format(page_number)

driver = webdriver.Chrome()
driver.get(url)

html = driver.page_source

parser = MyParser(html)
parser.feed(html)

for item in parser.matches:
    print(item)

我得到的输出包含表的元数据。我一直无法弄清楚如何将其转换为 csv 表。

就是我的输出。

python html
1个回答
0
投票

您要查找的数据以 Json 形式嵌入 HTML 页面中。要将它们保存到 pandas 数据框,请将其保存为 CSV,您可以使用下一个示例:

import json
import re

import pandas as pd
import requests

url = "https://flo.uri.sh/visualisation/15396850/embed?auto=1"
html_source = requests.get(url).text

column_names = json.loads(
    re.search(r"_Flourish_data_column_names = (.*})", html_source).group(1)
)
data = json.loads(re.search(r"_Flourish_data = (.*})", html_source).group(1))

all_data = []
for r in data["rows"]:
    all_data.append(r["columns"])

df = pd.DataFrame(all_data, columns=column_names["rows"]["columns"])
print(df.to_csv("data.csv", index=False))

保存

data.csv
(LibreOffice 的屏幕截图):

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.