Skip to main content

query table from website, support MCP

Project description

mcp_query_table

基于playwright实现的财经网页表格爬虫,支持Model Context Protocol (MCP) 。目前可查询来源为

实盘时,如果某网站宕机或改版,可以立即切换到其他网站。(注意:不同网站的表格结构不同,需要提前做适配)

安装

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

使用

import asyncio

from mcp_query_table import *


async def main() -> None:
    async with BrowserManager(port=9222, browser_path=None, debug=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)
        bm.release_page(page)
        print('done')
        await page.wait_for_timeout(2000)


if __name__ == '__main__':
    asyncio.run(main())

注意事项

  1. 浏览器最好是Chrome。如一定要使用Edge,除了关闭Edge所有窗口外,还要在任务管理器关闭Microsoft Edge 的所有进程,即taskkill /f /im msedge.exe
  2. 浏览器要保证窗口宽度,防止部分网站自动适配成手机版,导致表格查询失败
  3. 如有网站账号,请提前登录。此工具无自动登录功能
  4. 不同网站的表格结构不同,同条件返回股票数量也不同。需要查询后做适配

工作原理

不同于requestsplaywright是基于浏览器的,模拟用户在浏览器中的操作。

  1. 不需要解决登录问题
  2. 不需要解决请求构造、响应解析
  3. 可以直接获取表格数据,所见即所得
  4. 运行速度慢于requests,但开发效率高

数据的获取有:

  1. 直接解析HTML表格
    1. 数字文本化了,不利于后期研究
    2. 适用性最强
  2. 截获请求,获取返回的json数据
    1. 类似于requests,需要做响应解析
    2. 灵活性差点,网站改版后,需要重新做适配

此项目采用的是模拟点击浏览器来发送请求,使用截获响应并解析的方法来获取数据。

后期会根据不同的网站改版情况,使用更适合的方法。

MCP支持

确保可以在控制台中执行python -m mcp_query_table -h。如果不能,可能要先pip install mcp_query_table

Cline中可以配置如下。其中commandpython的绝对路径,browser_pathChrome的绝对路径。

STDIO方式

{
  "mcpServers": {
    "mcp_query_table": {
      "command": "D:\\Users\\Kan\\miniconda3\\envs\\py312\\python.exe",
      "args": [
        "-m",
        "mcp_query_table",
        "--format",
        "markdown",
        "--browser_path",
        "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
      ]
    }
  }
}

SSE方式

先在控制台中执行如下命令,启动MCP服务

python -m mcp_query_table --format markdown --browser_path "C:\Program Files\Google\Chrome\Application\chrome.exe" --transport sse --mcp_port 8000

然后就可以连接到MCP服务了 http://localhost:8000/sse

使用MCP Inspector进行调试

npx @modelcontextprotocol/inspector python -m mcp_query_table --format markdown

打开浏览器并翻页是一个比较耗时的操作,会导致MCP Inspector页面超时,可以http://localhost:5173/?timeout=60000 表示超时时间为60秒

第一次尝试编写MCP项目,可能会有各种问题,欢迎大家交流。

MCP使用技巧

  1. 2024年涨幅最大的100只股票按2024年12月31日总市值排名。三个网站的结果都不一样

    • 同花顺:显示了2201只股票。前5个是工商银行、农业银行、中国移动、中国石油、建设银行
    • 通达信:显示了100只股票,前5个是寒武纪、正丹股份,汇金科技、万丰奥威、艾融软件
    • 东方财富:显示了100只股票,前5个是海光信息、寒武纪、光启技术、润泽科技、新易盛
  2. 大语言模型对问题拆分能力弱,所以要能合理的提问,保证查询条件不会被改动。以下推荐第2、3种

    • 2024年涨幅最大的100只股票按2024年12月31日总市值排名

      大语言模型非常有可能拆分这句,导致一步查询被分成了多步查询

    • 向东方财富查询“2024年涨幅最大的100只股票按2024年12月31日总市值排名”

      用引号括起来,避免被拆分

    • 向东方财富板块查询 “去年涨的最差的行业板块”,再查询此板块中去年涨的最好的5只股票

      分成两步查询,先查询板块,再查询股票。但最好不要全自动,因为第一步的结果它不理解“今日涨幅”和“区间涨幅”,需要交互修正

参考

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_query_table-0.2.6.tar.gz (15.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_query_table-0.2.6-py3-none-any.whl (16.7 kB view details)

Uploaded Python 3

File details

Details for the file mcp_query_table-0.2.6.tar.gz.

File metadata

  • Download URL: mcp_query_table-0.2.6.tar.gz
  • Upload date:
  • Size: 15.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.21

File hashes

Hashes for mcp_query_table-0.2.6.tar.gz
Algorithm Hash digest
SHA256 f49acf749867a0c9dc1a922bea10c378129dcc3cd6db9738ceb2e25ebcb3dfb7
MD5 0323a02c6899b7789c585b469542ffaf
BLAKE2b-256 e8b41139111286df8584fff3ea1c39f269dad76892c1cb8812290a5f06455aca

See more details on using hashes here.

File details

Details for the file mcp_query_table-0.2.6-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_query_table-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 ebd80f2b4285609b6e5c709dbb74288000c183b54f99d3fed8aeb0b38883d911
MD5 037d543b14337fd7b3a5c938dbd2358e
BLAKE2b-256 1dc298625064fa5326ccf1b53717d1f1129c530ba6d978a59dd89831cea558b3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page