import re import asyncio from aiohttp import TCPConnector, ClientSession import pyecharts.options as opts from pyecharts.charts import TreeMap """ Gallery 使用 pyecharts 1.1.0 参考地址: https://echarts.apache.org/examples/editor.html?c=treemap-drill-down 目前无法实现的功能: 1、层级的样式配置 """ async def get_json_data(url: str) -> dict: async with ClientSession(connector=TCPConnector(ssl=False)) as session: async with session.get(url=url) as response: return await response.json() # 获取官方的数据 data = asyncio.run( get_json_data( url="https://echarts.apache.org/examples/data/asset/data/" "ec-option-doc-statistics-201604.json" ) ) tree_map_data: dict = {"children": []} def convert(source, target, base_path: str): for key in source: if base_path != "": path = base_path + "." + key else: path = key if re.match(r"/^\$/", key): pass else: child = {"name": path, "children": []} target["children"].append(child) if isinstance(source[key], dict): convert(source[key], child, path) else: target["value"] = source["$count"] convert(source=data, target=tree_map_data, base_path="") ( TreeMap(init_opts=opts.InitOpts(width="1200px", height="720px")) .add( series_name="option", data=tree_map_data["children"], visual_min=300, leaf_depth=1, # 标签居中为 position = "inside" label_opts=opts.LabelOpts(position="inside"), ) .set_global_opts( legend_opts=opts.LegendOpts(is_show=False), title_opts=opts.TitleOpts( title="Echarts 配置项查询分布", subtitle="2016/04", pos_left="leafDepth" ), ) .render("echarts_option_query.html") )
时间: 2024-03-31 19:33:08 浏览: 75
这段代码是一个Python程序,它使用了多个第三方库和模块,包括re、asyncio、aiohttp、pyecharts等。
这个程序的主要功能是获取一个JSON格式的数据,然后将其转换为树状图数据,并使用pyecharts库生成一个树状图的可视化图表。
具体来说,程序首先通过异步方式获取一个JSON格式的数据,然后将其转换为树状图数据,最后使用pyecharts库生成一个树状图的可视化图表,并将其保存为HTML文件。
其中,convert()函数是一个递归函数,用于将JSON格式的数据转换为树状图数据。这个函数接受三个参数:source表示待转换的JSON数据,target表示最终的树状图数据,base_path表示当前JSON数据的路径。函数首先遍历JSON数据中的每个键值对,如果该键以"$"开头,则忽略该键;否则,将该键作为节点的名称,创建一个新的子节点,并将其添加到树状图数据中。如果该键对应的值是一个字典类型的数据,则递归调用convert()函数,将其转换为子节点;否则,将该键对应的"$count"值作为节点的权重,将其添加到父节点中。最终,convert()函数返回转换后的树状图数据。
在主程序中,使用pyecharts库创建一个TreeMap对象,并将树状图数据作为数据源,设置一些可视化选项和样式,最后调用render()方法将图表保存为HTML文件。
相关问题
利用这些包绘制图import asyncio from aiohttp import TCPConnector, ClientSession import random import pyecharts.options as opts from pyecharts.charts import Scatter3D
这段代码导入了一些 Python 库和模块,其中包括 `asyncio`、`aiohttp`、`random`、`pyecharts`。它们的作用分别是:
- `asyncio`:Python 的异步 I/O 库,提供了事件循环、协程、任务等机制,可以编写高效的异步代码。
- `aiohttp`:基于 asyncio 实现的 HTTP 客户端和服务器,可以进行异步网络通信。
- `random`:Python 的随机数生成模块,可以生成随机数、随机序列等。
- `pyecharts`:一个 Python 的数据可视化库,提供了各种图表类型,可以生成交互式的图表。
这段代码还导入了 `Scatter3D` 类型的图表,可以用于绘制三维散点图。绘制图表的过程需要根据具体的数据和需求进行相应的配置和调用。
import asyncio,aiohttp,aiofiles,os from gevent import monkey from bs4 import BeautifulSoup import nest_asyncio nest_asyncio.apply() class VoaCrawler: def __init__(self, url): self.url = url async def fetch_mp3_urls(self, page_url): async with aiohttp.ClientSession() as session: async with session.get(page_url) as response: html = await response.text() soup = BeautifulSoup(html, 'html.parser') mp3_urls = [] for link in soup.find_all('a'): href = link.get('href') if href and href.endswith('.mp3'): mp3_urls.append(href) self.mp3_urls=mp3_urls async def download_mp3(self): async for mp3_url in self.mp3_urls: async with aiohttp.ClientSession() as session: async with session.get(mp3_url) as resp: os.chdir("/Users/lihanjing/Desktop/python/每周作业/作业week13/vedios") if resp.status == 200: async with aiofiles.open(mp3_url.split('/')[-1], mode='wb') as f: await f.write(await resp.content.read()) crawler = VoaCrawler('https://www.51voa.com/VOA_Standard_3.html') loop=asyncio.get_event_loop() tasks= [loop.create_task(crawler.fetch_mp3_urls(5)),loop.create_task(crawler.download_mp3())] loop.run_until_complete(asyncio.wait(tasks)) loop.close()
这段代码是一个使用异步编程方式爬取VOA网站的mp3文件链接并下载到本地的爬虫程序。它使用了Python中的asyncio模块和aiohttp库来实现异步HTTP请求和异步文件读写操作。具体来说,它定义了一个VoaCrawler类,其中包含fetch_mp3_urls和download_mp3两个异步方法,前者用于从VOA网站获取mp3文件链接,后者用于将这些链接对应的文件下载到本地。在主函数中,它创建了一个VoaCrawler对象,并使用asyncio模块创建了两个任务,并通过run_until_complete方法启动了这两个任务的执行,从而实现了异步爬取和下载。
阅读全文