Query Table
Um rastreador de tabelas financeiras da web usando Playwright que consulta dados de vários sites com alternância de fallback.
Documentação
mcp_query_table
-
Rastreador de tabelas de páginas financeiras implementado com base em
playwright, suportandoModel Context Protocol (MCP). Atualmente, as fontes consultáveis são:Em operação real, se um site estiver fora do ar ou passar por reformulação, você pode alternar imediatamente para outro site. (Observação: diferentes sites têm estruturas de tabela diferentes, sendo necessária adaptação antecipada.)
-
Rastreador de chamadas de modelo de linguagem grande implementado com base em
playwright. As fontes atualmente disponíveis são:RooCodefornece o recursoHuman Reply. No entanto, descobriu-se que a versão web do纳米搜索corrompe a formatação ao copiar, então este recurso foi desenvolvido.
Instalação
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())
Observações
- O navegador ideal é o
Chrome. Se for necessário usar oEdge, além de fechar todas as janelas doEdge, também é preciso encerrar todos os processos doMicrosoft Edgeno Gerenciador de Tarefas, ou seja,taskkill /f /im msedge.exe. - Garanta a largura da janela do navegador para evitar que alguns sites se adaptem automaticamente à versão mobile, causando falha na consulta de tabelas.
- Se você tiver conta em algum site, faça login antecipadamente. Esta ferramenta não possui função de login automático.
- Diferentes sites têm estruturas de tabela diferentes, e o número de ações retornadas para a mesma condição também varia. É necessário fazer adaptação após a consulta.
Princípio de Funcionamento
Diferente do requests, o playwright é baseado em navegador, simulando as operações do usuário no navegador.
- Não é necessário resolver problemas de login.
- Não é necessário lidar com construção de requisições ou análise de respostas.
- É possível obter dados de tabela diretamente, o que você vê é o que você obtém.
- A velocidade de execução é mais lenta que a do
requests, mas a eficiência de desenvolvimento é alta.
A obtenção de dados inclui:
- Análise direta de tabelas HTML
- Os números são convertidos em texto, o que não é favorável para pesquisas posteriores.
- Maior aplicabilidade.
- Interceptar requisições e obter os dados
jsonretornados- Semelhante ao
requests, é necessário fazer análise de resposta. - Menos flexível; após reformulação do site, é necessário refazer a adaptação.
- Semelhante ao
Este projeto utiliza a simulação de cliques no navegador para enviar requisições, e o método de interceptar e analisar respostas para obter dados.
No futuro, métodos mais adequados serão utilizados de acordo com as reformulações dos diferentes sites.
Modo Headless
O modo headless é mais rápido, mas alguns sites exigem login antecipado. Portanto, no modo headless é obrigatório especificar user_data_dir, caso contrário, pode ser solicitado login.
- Quando
endpoint=None, oheadless=Truepode iniciar uma nova instância do navegador em modo headless. Especifiqueexecutable_patheuser_data_dirpara garantir o funcionamento normal no modo headless. endpointcomeça comhttp://, conectando-se a um navegador com interface gráfica iniciado no modoCDP. O parâmetro--remote-debugging-porté obrigatório.executable_pathé o caminho local do navegador.endpointcomeça comws://, conectando-se a umPlaywright Serverremoto. Também é modo headless, mas não é possível especificaruser_data_dir, portanto o uso é limitado.
A nova política de segurança do Chrome impede a criação do serviço CDP ao usar o user_data_dir padrão. Recomenda-se copiar o diretório de configuração para outro local.
Suporte MCP
Certifique-se de que python -m mcp_query_table -h pode ser executado no console. Se não for possível, talvez seja necessário pip install mcp_query_table primeiro.
No Cline, a configuração pode ser feita da seguinte forma. command é o caminho absoluto do python, e timeout é o tempo limite em segundos. Nas plataformas AI, como o tempo de retorno geralmente excede 1 minuto, é necessário definir um tempo limite maior.
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
Primeiro, execute o seguinte comando no console para iniciar o serviço 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"
Em seguida, você pode se conectar ao serviço 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"
O endereço de conexão é http://127.0.0.1:8000/mcp.
Depuração com MCP Inspector
npx @modelcontextprotocol/inspector python -m mcp_query_table --format markdown --endpoint http://127.0.0.1:9222
Abrir o navegador e navegar pelas páginas é uma operação que consome tempo e pode causar timeout na página MCP Inspector. Você pode usar http://localhost:5173/?timeout=300000 para definir o tempo limite como 300 segundos.
Esta é a primeira tentativa de escrever um projeto MCP, pode haver vários problemas. Todos são bem-vindos para trocar ideias.
Dicas de uso do MCP
-
As 100 ações com maior valorização em 2024, classificadas pela capitalização de mercado total em 31 de dezembro de 2024. Os resultados dos três sites são diferentes.
- 同花顺: exibiu 2.201 ações. As 5 primeiras são 工商银行, 农业银行, 中国移动, 中国石油 e 建设银行.
- 通达信: exibiu 100 ações. As 5 primeiras são 寒武纪, 正丹股份, 汇金科技, 万丰奥威 e 艾融软件.
- 东方财富: exibiu 100 ações. As 5 primeiras são 海光信息, 寒武纪, 光启技术, 润泽科技 e 新易盛.
-
Os modelos de linguagem grande têm capacidade fraca de dividir problemas, portanto, é necessário fazer perguntas de forma razoável para garantir que as condições de consulta não sejam alteradas. As opções 2 e 3 são recomendadas abaixo:
- As 100 ações com maior valorização em 2024, classificadas pela capitalização de mercado total em 31 de dezembro de 2024
É muito provável que o modelo de linguagem grande divida esta frase, fazendo com que uma consulta de uma etapa se torne várias etapas.
- Consultar 东方财富: "As 100 ações com maior valorização em 2024, classificadas pela capitalização de mercado total em 31 de dezembro de 2024"
Use aspas para evitar que seja dividido.
- Consultar o setor 东方财富: "os setores industriais com pior desempenho no ano passado" e, em seguida, consultar as 5 ações com melhor desempenho nesse setor no ano passado.
Divida em duas etapas: primeiro consulte o setor e depois as ações. Mas é melhor não automatizar totalmente, pois o modelo não entende "variação diária" e "variação do período" nos resultados da primeira etapa, sendo necessária correção interativa.
- As 100 ações com maior valorização em 2024, classificadas pela capitalização de mercado total em 31 de dezembro de 2024
Suporte a Streamlit
Permite consultar dados financeiros na mesma página e inseri-los manualmente no AI para análise aprofundada. Consulte o arquivo README.md no diretório streamlit.
