Query Table
Un rastreador de tablas web financieras que utiliza Playwright para consultar datos de múltiples sitios web con conmutación de respaldo.
Documentación
mcp_query_table
-
Rastreador de tablas de páginas web financieras implementado basado en
playwright, compatible conModel Context Protocol (MCP). Las fuentes consultables actualmente son:En operaciones en vivo, si un sitio web se cae o se rediseña, se puede cambiar inmediatamente a otro sitio. (Nota: la estructura de tablas de diferentes sitios web es diferente, se necesita adaptación previa).
-
Rastreador de llamadas a modelos de lenguaje grandes implementado basado en
playwright. Las fuentes disponibles actualmente son:RooCodeproporciona la funcionalidad deHuman Reply. Pero se descubrió que al copiar en la versión web de纳米搜索se rompe el formato, por lo que se desarrolló esta funcionalidad.
Instalación
pip install -i https://pypi.org/simple --upgrade mcp_query_table
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade mcp_query_table
Uso
import asyncio
from mcp_query_table import *
async def main() -> None:
async with BrowserManager(endpoint="http://127.0.0.1:9222", executable_path=None, devtools=True) as bm:
# 问财需要保证浏览器宽度>768,防止界面变成适应手机
page = await bm.get_page()
df = await query(page, '收益最好的200只ETF', query_type=QueryType.ETF, max_page=1, site=Site.THS)
print(df.to_markdown())
df = await query(page, '年初至今收益率前50', query_type=QueryType.Fund, max_page=1, site=Site.TDX)
print(df.to_csv())
df = await query(page, '流通市值前10的行业板块', query_type=QueryType.Index, max_page=1, site=Site.TDX)
print(df.to_csv())
# TODO 东财翻页要提前登录
df = await query(page, '今日涨幅前5的概念板块;', query_type=QueryType.Board, max_page=3, site=Site.EastMoney)
print(df)
output = await chat(page, "1+2等于多少?", provider=Provider.YuanBao)
print(output)
output = await chat(page, "3+4等于多少?", provider=Provider.YuanBao, create=True)
print(output)
print('done')
bm.release_page(page)
await page.wait_for_timeout(2000)
if __name__ == '__main__':
asyncio.run(main())
Notas
- El navegador preferiblemente es
Chrome. Si es necesario usarEdge, además de cerrar todas las ventanas deEdge, también se deben cerrar todos los procesos deMicrosoft Edgeen el administrador de tareas, es decir,taskkill /f /im msedge.exe. - El navegador debe garantizar el ancho de la ventana, para evitar que algunos sitios web se adapten automáticamente a la versión móvil, lo que provoca fallos en la consulta de tablas.
- Si tiene una cuenta en el sitio web, inicie sesión con antelación. Esta herramienta no tiene función de inicio de sesión automático.
- La estructura de tablas de diferentes sitios web es diferente, y el número de acciones devueltas bajo las mismas condiciones también es diferente. Se necesita adaptación después de la consulta.
Principio de funcionamiento
A diferencia de requests, playwright se basa en el navegador, simulando las operaciones del usuario en el navegador.
- No es necesario resolver problemas de inicio de sesión.
- No es necesario resolver la construcción de solicitudes ni el análisis de respuestas.
- Se pueden obtener directamente los datos de las tablas, lo que ves es lo que obtienes.
- La velocidad de ejecución es más lenta que
requests, pero la eficiencia de desarrollo es alta.
La obtención de datos incluye:
- Analizar directamente las tablas HTML.
- Los números se convierten en texto, lo que no es favorable para investigaciones posteriores.
- La aplicabilidad es la más fuerte.
- Interceptar solicitudes y obtener los datos
jsondevueltos.- Similar a
requests, se necesita análisis de respuestas. - La flexibilidad es menor; después de un rediseño del sitio web, se necesita rehacer la adaptación.
- Similar a
Este proyecto utiliza el método de simular clics en el navegador para enviar solicitudes, y utiliza la intercepción de respuestas y su análisis para obtener datos.
En el futuro, se utilizarán métodos más adecuados según los cambios de los diferentes sitios web.
Modo sin cabeza (headless)
El modo sin cabeza es más rápido, pero algunos sitios web requieren inicio de sesión previo, por lo que en el modo sin cabeza se debe especificar user_data_dir, de lo contrario aparecerá la necesidad de iniciar sesión.
- Cuando
endpoint=None,headless=Truepuede iniciar una nueva instancia del navegador sin cabeza. Especificarexecutable_pathyuser_data_dirpara garantizar el funcionamiento normal en modo sin cabeza. endpointcomienza conhttp://, se conecta a un navegador con cabeza iniciado en modoCDP, el parámetro debe incluir--remote-debugging-port.executable_pathes la ruta del navegador local.endpointcomienza conws://, se conecta aPlaywright Serverremoto. También es modo sin cabeza, pero no se puede especificaruser_data_dir, por lo que su uso es limitado.
La nueva política de seguridad de Chrome no podrá crear el servicio CDP al usar el user_data_dir predeterminado. Se recomienda copiar el directorio de configuración a otro lugar.
Soporte MCP
Asegúrese de poder ejecutar python -m mcp_query_table -h en la consola. Si no es posible, es posible que primero deba pip install mcp_query_table.
En Cline se puede configurar lo siguiente. Donde command es la ruta absoluta de python, y timeout es el tiempo de espera en segundos. En las plataformas AI, dado que el tiempo de retorno suele superar 1 minuto, se necesita establecer un tiempo de espera grande.
Modo STDIO
{
"mcpServers": {
"mcp_query_table": {
"timeout": 300,
"command": "D:\\Users\\Kan\\miniconda3\\envs\\py312\\python.exe",
"args": [
"-m",
"mcp_query_table",
"--format",
"markdown",
"--endpoint",
"http://127.0.0.1:9222",
"--executable_path",
"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
]
}
}
}
Modo SSE
Primero ejecute el siguiente comando en la consola para iniciar el servicio MCP.
python -m mcp_query_table --format markdown --transport sse --port 8000 --endpoint http://127.0.0.1:9222 --user_data_dir "D:\user-data-dir"
Luego puede conectarse al servicio MCP.
{
"mcpServers": {
"mcp_query_table": {
"timeout": 300,
"url": "http://127.0.0.1:8000/sse"
}
}
}
Modo Streamable HTTP
python -m mcp_query_table --format markdown --transport streamable-http --port 8000 --endpoint http://127.0.0.1:9222 --user_data_dir "D:\user-data-dir"
La dirección de conexión es http://127.0.0.1:8000/mcp.
Depuración con MCP Inspector
npx @modelcontextprotocol/inspector python -m mcp_query_table --format markdown --endpoint http://127.0.0.1:9222
Abrir el navegador y pasar páginas es una operación que consume tiempo, lo que puede causar que la página MCP Inspector se agote. Puede http://localhost:5173/?timeout=300000 para indicar que el tiempo de espera es de 300 segundos.
Es la primera vez que se intenta escribir un proyecto MCP, puede haber varios problemas. Todos son bienvenidos a intercambiar ideas.
Consejos de uso de MCP
-
Las 100 acciones con mayor aumento en 2024 clasificadas por capitalización de mercado total al 31 de diciembre de 2024. Los resultados de los tres sitios web son diferentes.
- 同花顺: mostró 2201 acciones. Las primeras 5 son 工商银行, 农业银行, 中国移动, 中国石油, 建设银行.
- 通达信: mostró 100 acciones. Las primeras 5 son 寒武纪, 正丹股份, 汇金科技, 万丰奥威, 艾融软件.
- 东方财富: mostró 100 acciones. Las primeras 5 son 海光信息, 寒武纪, 光启技术, 润泽科技, 新易盛.
-
Los modelos de lenguaje grandes tienen una capacidad débil para dividir problemas, por lo que se debe preguntar de manera razonable para garantizar que las condiciones de consulta no se modifiquen. Se recomiendan las opciones 2 y 3 a continuación:
- Las 100 acciones con mayor aumento en 2024 clasificadas por capitalización de mercado total al 31 de diciembre de 2024
Es muy probable que el modelo de lenguaje grande divida esta frase, lo que hace que una consulta se convierta en múltiples consultas.
- Consultar a 东方财富: "Las 100 acciones con mayor aumento en 2024 clasificadas por capitalización de mercado total al 31 de diciembre de 2024"
Enciérrelo entre comillas para evitar que se divida.
- Consultar al sector de 东方财富: "el sector industrial con peor rendimiento el año pasado", y luego consultar las 5 mejores acciones de ese sector el año pasado.
Divida en dos pasos: primero consulte el sector, luego las acciones. Pero es mejor no hacerlo completamente automático, porque el resultado del primer paso no entiende "aumento de hoy" y "aumento de intervalo", se necesita corrección interactiva.
- Las 100 acciones con mayor aumento en 2024 clasificadas por capitalización de mercado total al 31 de diciembre de 2024
Soporte para Streamlit
Permite consultar datos financieros en la misma página e ingresarlos manualmente en AI para un análisis profundo. Consulte el archivo README.md en el directorio streamlit.
