#600 by GitHub stars
eatmoreduck/boss-zhipin-scraper
Scrape BOSS直聘 (job listing site) via Chrome CDP. Searches jobs by keyword/city/filters, fetches JD details, outputs structured JSON/CSV with plaintext salary, and can summarize scraped results into a job-market prompt. Optional --company locally filters results by company name (boss_name substring)
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +3 / −3 lines
Before Network or broad shell → After Network or broad shell
1f8df7b76ac1 → 7913419b6b53
- 4 version: 2.3.1
+ 4 version: 2.4.0
- 164 | `--pages` | 3 | 抓取页数(上限 10,每页 30 条) |
+ 164 | `--pages` | 3 | 抓取页数(上限 20,每页 15 条) |
- 270 - 单次最多 10 页(300 条),防封号
+ 270 - 单次最多 20 页(300 条),防封号
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 1f8df7b76ac1
No earlier version was observed for comparison.
Verified commit 7913419b6b53e45ee621da7dab066a350ef7b060
git clone --filter=blob:none --no-checkout https://github.com/eatmoreduck/boss-zhipin-scraper.git .hotskills/eatmoreduck-boss-zhipin-scraper && git -C .hotskills/eatmoreduck-boss-zhipin-scraper checkout --detach 7913419b6b53e45ee621da7dab066a350ef7b060
# Copy each selected skill directory from .hotskills/eatmoreduck-boss-zhipin-scraper into .agents/skills/<skill-name>/Heat
5.2- Star growth, last 7 daysAhead of 91% of tracked repositories
- Star growth, last 24 hoursAhead of 3% of tracked repositories
- Rank movement, last 7 daysAhead of 42% of tracked repositories
- Commits, last 30 daysAhead of 78% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
How it works
boss-zhipin-scraper
When your agent uses it
Scrape BOSS直聘 (job listing site) via Chrome CDP. Searches jobs by keyword/city/filters, fetches JD details, outputs structured JSON/CSV with plaintext salary, and can summarize scraped results into a job-market prompt. Optional --company locally filters results by company name (boss_name substring) with no extra request. Use when user wants to search/analyze jobs on BOSS直聘 or zhipin.com.
What it loads into context
Frontmatter
160 tokensAlways available to the agent
SKILL.md
4,625 tokensWhen the skill is activated
Reference documents
21,231 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 前置条件
- 脚本位置
- 依赖安装(首次使用必须执行)
- 自动化流程
- 参数速查
- 输出格式
- 工作原理
- 数据安全策略
- 常见问题
- 注意事项
- 安装本 Skill
Scripts executed separately
scripts/boss_cdp_raw.pyscripts/job_summary.pyscripts/package-skill.shtests/test_chrome_setup.pytests/test_job_summary.py
Files
.github/ISSUE_TEMPLATE/bug_report.ymlasset1,968 bytes.github/ISSUE_TEMPLATE/feature_request.ymlasset1,321 bytes.github/ISSUE_TEMPLATE/question.ymlasset1,177 bytes.github/workflows/ci.ymlasset1,748 bytes.github/workflows/make-release.ymlasset3,783 bytes.github/workflows/pullfrog.ymlasset3,444 bytes.github/workflows/release.ymlasset6,125 bytes.gitignoreasset678 bytesAGENTS.mddoc8,547 bytesCHANGELOG.mddoc16,344 bytesCONTRIBUTING.mddoc4,663 bytesLICENSEasset1,068 bytesREADME.en.mddoc25,270 bytesREADME.mddoc23,051 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesSKILL.mdcore15,513 bytesassets/reward-qr.pngasset293,744 bytescover.pngasset1,863,502 bytesdata/city_codes.jsonasset10,280 bytespyproject.tomlasset1,071 bytesrequirements.txtdoc55 bytesscripts/boss_cdp_raw.pyruns125,746 bytesscripts/job_summary.pyruns16,708 bytesscripts/package-skill.shruns3,968 bytestests/test_chrome_setup.pyruns111,461 bytestests/test_job_summary.pyruns19,207 bytesuv.lockasset37,275 bytes
Read SKILL.md
# BOSS直聘职位抓取工具 v2.3
通过 Chrome CDP 协议抓取 BOSS直聘 (zhipin.com) 职位数据,输出结构化 JSON/CSV(含明文薪资),并可对已抓取结果生成聚合摘要和求职材料优化提示词。
## 前置条件
- Chrome 浏览器已安装
- Python 3.10+
- 用户已登录 zhipin.com(或愿意手动登录)
## 脚本位置
本 skill 的脚本在 skill 目录下:
View the complete source on GitHubSkills included
- boss-zhipin-scraper
Repository facts
- License
- MIT
- Created
- Jun 11, 2026
- Last pushed
- Nov 3, 2026
- Forks
- 226
- Open issues
- 11
- Project activity
- Active
Rank over the last 12 weeks
Now #600 · best #500 · down 54 in 30 days
- #594 from Nov 1 to Nov 2
- #599 on Nov 3
- #598 on Nov 4
- #597 on Nov 5
- #598 on Nov 6
- #600 since Nov 7
77 earlier periods
- #540 on Aug 2
- #514 on Aug 8
- #521 on Aug 9
- #535 on Aug 10
- #536 on Aug 11
- #533 on Aug 12
- #535 on Aug 13
- #533 on Aug 14
- #517 on Aug 15
- #526 on Aug 16
- #523 on Aug 17
- #539 on Aug 18
- #528 on Aug 19
- #519 from Aug 20 to Aug 21
- #500 on Aug 22
- #519 on Aug 23
- #522 on Aug 24
- #530 on Aug 25
- #520 on Aug 26
- #530 on Aug 27
- #527 on Aug 28
- #510 on Aug 29
- #501 on Aug 30
- #524 from Aug 31 to Sep 1
- #518 on Sep 2
- #524 on Sep 3
- #507 on Sep 4
- #501 on Sep 5
- #515 on Sep 6
- #513 on Sep 7
- #533 on Sep 8
- #518 on Sep 9
- #524 on Sep 10
- #519 on Sep 11
- #511 on Sep 12
- #507 on Sep 13
- #521 on Sep 14
- #514 on Sep 15
- #525 on Sep 16
- #520 on Sep 17
- #522 on Sep 18
- #505 on Sep 19
- #517 on Sep 20
- #516 on Sep 21
- #523 on Sep 22
- #517 on Sep 23
- #505 on Sep 24
- #504 on Sep 25
- #502 on Sep 26
- #521 from Sep 27 to Sep 28
- #536 on Sep 29
- #522 on Sep 30
- #520 from Oct 1 to Oct 2
- #509 on Oct 3
- #510 on Oct 4
- #519 on Oct 5
- #533 on Oct 6
- #531 on Oct 7
- #546 on Oct 8
- #544 on Oct 9
- #533 on Oct 10
- #529 on Oct 11
- #539 from Oct 12 to Oct 13
- #543 on Oct 14
- #538 on Oct 15
- #540 on Oct 16
- #534 from Oct 17 to Oct 18
- #549 on Oct 19
- #555 on Oct 20
- #559 on Oct 21
- #546 on Oct 22
- #540 on Oct 23
- #532 on Oct 24
- #584 on Oct 25
- #588 on Oct 28
- #589 from Oct 29 to Oct 30
- #590 on Oct 31
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 4, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 22 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 1 dangerous shell commandin 1 file: scripts/package-skill.sh:95
- 305 network referencesin 8 files: uv.lock:30 README.en.md:5 README.md:5 and 5 more
- 1 obfuscation signalin 1 file: scripts/boss_cdp_raw.py:601
- No instruction overrides
- 5 executable scriptsin 5 files: scripts/boss_cdp_raw.py:1 scripts/job_summary.py:1 scripts/package-skill.sh:1 and 2 more
- 28 references to secretsin 6 files: .github/workflows/pullfrog.yml:35 tests/test_chrome_setup.py:1255 scripts/boss_cdp_raw.py:117 and 3 more
- No requests to vote in Hot
Show all 340 signals by file
.github/workflows/pullfrog.yml
- Access to secretsline 35
[Credential-related source omitted] - Access to secretsline 36
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Access to secretsline 39
[Credential-related source omitted] - Access to secretsline 40
[Credential-related source omitted] - Access to secretsline 41
[Credential-related source omitted] - Access to secretsline 42
[Credential-related source omitted] - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 45
[Credential-related source omitted] - Access to secretsline 46
[Credential-related source omitted] - Access to secretsline 47
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Access to secretsline 49
[Credential-related source omitted] - Network accessline 51
# for Amazon Bedrock (https://docs.pullfrog.com/bedrock) - Network accessline 58
# for Google Vertex AI (https://docs.pullfrog.com/vertex) - Network accessline 65
# for Azure OpenAI (https://docs.pullfrog.com/azure) - Access to secretsline 69
[Credential-related source omitted] - Network accessline 75
# for any OpenAI-compatible endpoint — LiteLLM, Cloudflare AI Gateway, # self-hosted vLLM (https://docs.pullfrog.com/openai-compatible) - Network accessline 76
# self-hosted vLLM (https://docs.pullfrog.com/openai-compatible) - Network accessline 77
# OPENAI_COMPATIBLE_BASE_URL: https://litellm.example.com/v1 - Access to secretsline 78
[Credential-related source omitted]
.gitignore
- Access to secretsline 11
[Credential-related source omitted]
AGENTS.md
- Access to secretsline 50
[Credential-related source omitted]
CONTRIBUTING.md
- Network accessline 17
git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 27
- **风格**:遵循 [PEP 8](https://peps.python.org/pep-0008/),用 4 空格缩进、UTF-8、LF 换行。 - **异常处理**:不要用 bare `except:`,必须捕获具体异常类型(`requests.ConnectionError`、`json.JSONDecodeError` 等),项目现有的代码就是这么做的,请保持一致。 - Network accessline 45
使用 [Conventional Commits](https://www.conventionalcommits.org/) 格式,参考现有提交历史: - Network accessline 69
仓库启用了 [CodeRabbit](https://www.coderabbit.ai) 作为自动化 review 助手:PR 创建后会自动生成变更摘要和逐行评审意见;在 PR 评论中 `@coderabbitai` 可以让它重新生成摘要、解答疑问或按建议生成修改。它只是辅助手段,合并与否仍以人工 review 结论为准。
README.en.md
- Network accessline 5
 - Network accessline 6
 - Network accessline 7
 - Network accessline 8
 - Network accessline 10
A lightweight **BOSS Zhipin scraper / crawler** (a.k.a. spider) for job listings on [zhipin.com](https://www.zhipin.com). Instead of driving a heavy Selenium/Playwright browser, it connects to your **already-logged-in Chrome or Microsoft Ed - Network accessline 18
This project is for **learning and technical research purposes only**. It is intended to explore Chrome DevTools Protocol, front-end anti-scraping mechanisms, and data-collection techniques. Do **not** use it for any purpose that violates t - Network accessline 25
# 1. Clone + install deps git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 26
git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 79
# 1. Clone the repo git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 80
git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 92
### Option 2: One-line curl install - Network accessline 97
mkdir -p ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/SKILL.md \ - Network accessline 98
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/SKILL.md \ - Network accessline 99
-o ~/.hermes/skills/data-science/boss-zhipin-scraper/SKILL.md && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/boss_cdp_raw.py \ -o ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts/bo - Network accessline 100
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/boss_cdp_raw.py \ - Network accessline 101
-o ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts/boss_cdp_raw.py && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/job_summary.py \ -o ~/.hermes/skills/data-science/boss-zhipin-scra - Network accessline 102
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/job_summary.py \ - Network accessline 103
-o ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts/job_summary.py && \ mkdir -p ~/.hermes/skills/data-science/boss-zhipin-scraper/data && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/data/cit - Network accessline 104
mkdir -p ~/.hermes/skills/data-science/boss-zhipin-scraper/data && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/data/city_codes.json \ -o ~/.hermes/skills/data-science/boss-zhipin-scraper/data/city_c - Network accessline 105
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/data/city_codes.json \ - Network accessline 112
hermes skills install https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/SKILL.md --category data-science - Network accessline 123
The skill is listed on [skills.sh](https://skills.sh). Any agent that supports the Agent Skills format (Claude Code, Codex, Gemini CLI, Cursor, etc.) can install it with this one command — SKILL.md, the scripts, and the city code table ship - Network accessline 127
The skill is published on [ClawHub](https://clawhub.ai), the skill registry of the OpenClaw ecosystem. OpenClaw users can install it with one command: - Network accessline 138
# A pinned version (git tag) pip install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 139
pip install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" # Always the latest release (fixed URL; version comes from the wheel metadata) pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/latest/do - Network accessline 140
# Always the latest release (fixed URL; version comes from the wheel metadata) pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/latest/download/boss_zhipin_scraper-latest-py3-none-any.whl # uv (recommended, global com - Network accessline 141
pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/latest/download/boss_zhipin_scraper-latest-py3-none-any.whl - Network accessline 143
uv tool install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 162
You don't have to install it as a Skill — use it as a plain CLI. Since v2.4.0 every version ships as a [GitHub Release](https://github.com/eatmoreduck/boss-zhipin-scraper/releases) with a directly installable wheel — no PyPI needed: - Network accessline 165
# Option A: install a tagged version straight from Git (no manual download; deps resolve from PyPI) pip install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 166
pip install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 168
uv tool install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 170
# Option B: install the wheel from the Release page pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/download/v2.4.0/boss_zhipin_scraper-2.4.0-py3-none-any.whl - Network accessline 171
pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/download/v2.4.0/boss_zhipin_scraper-2.4.0-py3-none-any.whl - Network accessline 173
pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/latest/download/boss_zhipin_scraper-latest-py3-none-any.whl - Network accessline 179
# Option C: clone the source and run it without installing git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 180
git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Access to secretsline 228
[Credential-related source omitted] - Network accessline 381
- [LINUX DO](https://linux.do/) — A sincere, friendly, and vibrant tech community. This project endorses and recommends it. - Network accessline 387
[Homepage](https://www.eatmoreduck.com) · [Blog](https://blog.xiaohuangyu.space) · [X](https://x.com/eatmoreduck98) - Network accessline 391
[Credential-related source omitted]
README.md
- Network accessline 5
 - Network accessline 6
 - Network accessline 7
 - Network accessline 8
 - Network accessline 20
本项目仅供学习和技术研究参考,旨在探讨 Chrome DevTools Protocol、前端反爬机制与数据采集技术。请勿用于任何违反 [BOSS直聘用户协议](https://www.zhipin.com/about/protocol.html) 或相关法律法规的用途,不得用于商业转售、恶意爬取或对目标网站造成负担的行为。使用本项目所产生的一切后果由使用者自行承担,作者不对任何滥用行为负责。 - Network accessline 27
# 1. 克隆 + 装依赖 git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 28
git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 81
# 1. 克隆仓库 git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 82
git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 94
### 方式 2:curl 一键安装 - Network accessline 99
mkdir -p ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/SKILL.md \ - Network accessline 100
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/SKILL.md \ - Network accessline 101
-o ~/.hermes/skills/data-science/boss-zhipin-scraper/SKILL.md && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/boss_cdp_raw.py \ -o ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts/bo - Network accessline 102
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/boss_cdp_raw.py \ - Network accessline 103
-o ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts/boss_cdp_raw.py && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/job_summary.py \ -o ~/.hermes/skills/data-science/boss-zhipin-scra - Network accessline 104
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/job_summary.py \ - Network accessline 105
-o ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts/job_summary.py && \ mkdir -p ~/.hermes/skills/data-science/boss-zhipin-scraper/data && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/data/cit - Network accessline 106
mkdir -p ~/.hermes/skills/data-science/boss-zhipin-scraper/data && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/data/city_codes.json \ -o ~/.hermes/skills/data-science/boss-zhipin-scraper/data/city_c - Network accessline 107
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/data/city_codes.json \ - Network accessline 114
hermes skills install https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/SKILL.md --category data-science - Network accessline 125
[skills.sh](https://skills.sh) 已收录本技能。任何支持 Agent Skills 格式的 agent(Claude Code、Codex、Gemini CLI、Cursor 等)都可以用这条命令安装,SKILL.md、脚本和城市码表随技能一起分发,按提示选择要安装到哪个 agent 即可。 - Network accessline 129
本技能已上架 [ClawHub](https://clawhub.ai)(OpenClaw 生态的技能注册表),OpenClaw 用户可一条命令安装: - Network accessline 140
# 指定版本(git tag) pip install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 141
pip install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" # 永远装最新 Release(固定 URL,版本以 wheel 元数据为准) pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/latest/download/boss_zhipin_scraper-latest-py3-n - Network accessline 142
# 永远装最新 Release(固定 URL,版本以 wheel 元数据为准) pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/latest/download/boss_zhipin_scraper-latest-py3-none-any.whl # uv(推荐,全局命令) - Network accessline 143
pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/latest/download/boss_zhipin_scraper-latest-py3-none-any.whl - Network accessline 145
uv tool install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 164
不想装成 Skill 也可以直接当 CLI 用。自 v2.4.0 起每个版本都会发布 [GitHub Release](https://github.com/eatmoreduck/boss-zhipin-scraper/releases)(附可直接安装的 whl),无需上 PyPI: - Network accessline 167
# 方式 A:从 Git 安装指定版本(无需手动下载文件;依赖会自动从 PyPI 解析) pip install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 168
pip install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 170
uv tool install "git+https://github.com/eatmoreduck/boss-zhipin-scraper.git@v2.4.0" - Network accessline 172
# 方式 B:从 Release 页下载 whl 直装 pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/download/v2.4.0/boss_zhipin_scraper-2.4.0-py3-none-any.whl - Network accessline 173
pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/download/v2.4.0/boss_zhipin_scraper-2.4.0-py3-none-any.whl - Network accessline 175
pip install https://github.com/eatmoreduck/boss-zhipin-scraper/releases/latest/download/boss_zhipin_scraper-latest-py3-none-any.whl - Network accessline 181
# 方式 C:克隆源码运行(不安装) git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 182
git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git - Network accessline 382
- [LINUX DO](https://linux.do/) — 真诚、友善、充满活力的技术社区,本项目认可并推荐。 - Network accessline 388
[主页](https://www.eatmoreduck.com) · [博客](https://blog.xiaohuangyu.space) · [X](https://x.com/eatmoreduck98) - Network accessline 392
[Credential-related source omitted]
SKILL.md
- Network accessline 222
"company_industry": "电子商务", "skills": "Java | Spring | AI", "job_link": "https://www.zhipin.com/job_detail/xxx.html", - Network accessline 223
"skills": "Java | Spring | AI", "job_link": "https://www.zhipin.com/job_detail/xxx.html", "company_link": "https://www.zhipin.com/gongsi/xxx.html", - Network accessline 224
"job_link": "https://www.zhipin.com/job_detail/xxx.html", - Network accessline 225
"company_link": "https://www.zhipin.com/gongsi/xxx.html", - Network accessline 280
# 推荐:curl 一键安装 - Network accessline 281
mkdir -p ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts && curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/SKILL.md - Network accessline 282
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/SKILL.md \ - Network accessline 283
-o ~/.hermes/skills/data-science/boss-zhipin-scraper/SKILL.md && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/boss_cdp_raw.py \ -o ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts/bo - Network accessline 284
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/boss_cdp_raw.py \ - Network accessline 285
-o ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts/boss_cdp_raw.py && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/job_summary.py \ -o ~/.hermes/skills/data-science/boss-zhipin-scra - Network accessline 286
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/scripts/job_summary.py \ - Network accessline 287
-o ~/.hermes/skills/data-science/boss-zhipin-scraper/scripts/job_summary.py && \ mkdir -p ~/.hermes/skills/data-science/boss-zhipin-scraper/data && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/data/cit - Network accessline 288
mkdir -p ~/.hermes/skills/data-science/boss-zhipin-scraper/data && \ curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/data/city_codes.json \ -o ~/.hermes/skills/data-science/boss-zhipin-scraper/data/city_c - Network accessline 289
curl -sL https://raw.githubusercontent.com/eatmoreduck/boss-zhipin-scraper/master/data/city_codes.json \ - Network accessline 296
git clone https://github.com/eatmoreduck/boss-zhipin-scraper.git
scripts/boss_cdp_raw.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 76
API_JOB_LIST_PATH = "/wapi/zpgeek/search/joblist.json" HOT_CITY_URL = "https://www.zhipin.com/wapi/zpgeek/search/job/hot/city.json" - Network accessline 77
HOT_CITY_URL = "https://www.zhipin.com/wapi/zpgeek/search/job/hot/city.json" - Network accessline 78
CITY_GROUP_URL = "https://www.zhipin.com/wapi/zpCommon/data/cityGroup.json" - Access to secretsline 117
[Credential-related source omitted] - Access to secretsline 124
[Credential-related source omitted] - Access to secretsline 169
[Credential-related source omitted] - Network accessline 263
# 筛选参数映射 # Source snapshots: # - 城市: https://www.zhipin.com/wapi/zpgeek/search/job/hot/city.json + cityGroup.json - Network accessline 264
# Source snapshots: # - 城市: https://www.zhipin.com/wapi/zpgeek/search/job/hot/city.json + cityGroup.json # - 筛选项: https://www.zhipin.com/wapi/zpgeek/search/job/condition.json - Network accessline 265
# - 城市: https://www.zhipin.com/wapi/zpgeek/search/job/hot/city.json + cityGroup.json - Network accessline 266
# - 筛选项: https://www.zhipin.com/wapi/zpgeek/search/job/condition.json - Network accessline 371
raise RuntimeError("缺少 CDP 运行依赖") self.cdp_port = cdp_port resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=10) - Network accessline 372
self.cdp_port = cdp_port resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=10) ws_url = resp.json()["webSocketDebuggerUrl"] - Network accessline 373
resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=10) - Possible obfuscationline 601
body = base64.b64decode(body).decode("utf-8", errors="replace") - Network accessline 640
"encrypt_brand_id": encrypt_brand_id, "job_link": ( f"https://www.zhipin.com/job_detail/{encrypt_job_id}.html" - Network accessline 641
"job_link": ( f"https://www.zhipin.com/job_detail/{encrypt_job_id}.html" if encrypt_job_id else "" - Network accessline 642
f"https://www.zhipin.com/job_detail/{encrypt_job_id}.html" - Network accessline 644
), "company_link": ( f"https://www.zhipin.com/gongsi/{encrypt_brand_id}.html" - Network accessline 645
"company_link": ( f"https://www.zhipin.com/gongsi/{encrypt_brand_id}.html" if encrypt_brand_id else "" - Network accessline 646
f"https://www.zhipin.com/gongsi/{encrypt_brand_id}.html" - Network accessline 681
for (var j = 0; j < tagEls.length; j++) tags.push(tagEls[j].innerText.trim()); var jobLink = nameEl ? (nameEl.getAttribute('href') || '') : ''; if (jobLink && jobLink.charAt(0) === '/') jobLink = 'https://www.zhipin.com' + j - Network accessline 682
var jobLink = nameEl ? (nameEl.getAttribute('href') || '') : ''; if (jobLink && jobLink.charAt(0) === '/') jobLink = 'https://www.zhipin.com' + jobLink; var cLink = bossLink ? (bossLink.getAttribute('href') || '') : ''; - Network accessline 683
if (jobLink && jobLink.charAt(0) === '/') jobLink = 'https://www.zhipin.com' + jobLink; - Network accessline 684
var cLink = bossLink ? (bossLink.getAttribute('href') || '') : ''; if (cLink && cLink.charAt(0) === '/') cLink = 'https://www.zhipin.com' + cLink; var t = nameEl ? nameEl.innerText.trim() : ''; - Network accessline 685
if (cLink && cLink.charAt(0) === '/') cLink = 'https://www.zhipin.com' + cLink; - Network accessline 1215
cdp.send( "Page.navigate", {"url": "https://www.zhipin.com/web/user/"}, - Network accessline 1216
"Page.navigate", {"url": "https://www.zhipin.com/web/user/"}, sid, - Network accessline 1217
{"url": "https://www.zhipin.com/web/user/"}, - Network accessline 1698
if code: params[key] = code return f"https://www.zhipin.com/web/geek/job?{urlencode(params)}" - Network accessline 1700
return f"https://www.zhipin.com/web/geek/job?{urlencode(params)}" - Network accessline 2480
else: try: resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=5) - Network accessline 2481
try: resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=5) data = resp.json() - Network accessline 2482
resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=5) - Network accessline 2566
def is_cdp_ready(cdp_port): try: resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=2) - Network accessline 2567
try: resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=2) return resp.status_code == 200 - Network accessline 2568
resp = requests.get(f"http://127.0.0.1:{cdp_port}/json/version", timeout=2)
scripts/job_summary.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/package-skill.sh
tests/test_chrome_setup.py
- Executable scriptline 1
Executable file - Network accessline 150
mock.call( "Page.navigate", {"url": "https://www.zhipin.com/web/user/"}, - Network accessline 151
"Page.navigate", {"url": "https://www.zhipin.com/web/user/"}, "login-session", - Network accessline 152
{"url": "https://www.zhipin.com/web/user/"}, - Network accessline 540
"location": "上海", "tags": "3-5年 | 本科", "job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 541
"tags": "3-5年 | 本科", "job_link": "https://www.zhipin.com/job_detail/abc.html", } - Network accessline 542
"job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 567
"location": "上海", "tags": "3-5年 | 本科", "job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 568
"tags": "3-5年 | 本科", "job_link": "https://www.zhipin.com/job_detail/abc.html", "boss_active_status": "本周活跃", - Network accessline 569
"job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 840
module = load_module() job = { "job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 841
job = { "job_link": "https://www.zhipin.com/job_detail/abc.html", "security_id": "sec value", - Network accessline 842
"job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 849
self.assertEqual(job["job_link"], "https://www.zhipin.com/job_detail/abc.html") - Network accessline 850
self.assertEqual( detail_url, "https://www.zhipin.com/job_detail/abc.html?lid=lid-123&securityId=sec+value", - Network accessline 851
detail_url, "https://www.zhipin.com/job_detail/abc.html?lid=lid-123&securityId=sec+value", ) - Network accessline 852
"https://www.zhipin.com/job_detail/abc.html?lid=lid-123&securityId=sec+value", - Network accessline 869
self.assertEqual(mapped["encrypt_boss_id"], "boss1") self.assertEqual(mapped["encrypt_brand_id"], "brand1") self.assertEqual(mapped["job_link"], "https://www.zhipin.com/job_detail/enc1.html") - Network accessline 870
self.assertEqual(mapped["encrypt_brand_id"], "brand1") self.assertEqual(mapped["job_link"], "https://www.zhipin.com/job_detail/enc1.html") self.assertEqual(mapped["company_link"], "https://www.zhipin.com/gongsi/brand1.html") - Network accessline 871
self.assertEqual(mapped["job_link"], "https://www.zhipin.com/job_detail/enc1.html") - Network accessline 872
self.assertEqual(mapped["company_link"], "https://www.zhipin.com/gongsi/brand1.html") - Access to secretsline 1255
[Credential-related source omitted] - Access to secretsline 1256
[Credential-related source omitted] - Access to secretsline 1272
[Credential-related source omitted] - Access to secretsline 1273
[Credential-related source omitted] - Network accessline 1345
"salary": "30-60K", "salary_source": "api", "job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 1346
"salary_source": "api", "job_link": "https://www.zhipin.com/job_detail/abc.html", }])) - Network accessline 1347
"job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 1351
"salary": "", "salary_source": "api_empty", "job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 1352
"salary_source": "api_empty", "job_link": "https://www.zhipin.com/job_detail/abc.html", }])) - Network accessline 1353
"job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 1366
"location": "上海", "tags_list": "3-5年 | 本科", "job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 1367
"tags_list": "3-5年 | 本科", "job_link": "https://www.zhipin.com/job_detail/abc.html", "skill_tags": ["Python", "LLM"], - Network accessline 1368
"job_link": "https://www.zhipin.com/job_detail/abc.html", - Network accessline 1424
"job_id": "blocked", "title": "AI Product Manager", "job_link": "https://www.zhipin.com/job_detail/blocked.html", - Network accessline 1425
"title": "AI Product Manager", "job_link": "https://www.zhipin.com/job_detail/blocked.html", } - Network accessline 1426
"job_link": "https://www.zhipin.com/job_detail/blocked.html", - Access to secretsline 1527
[Credential-related source omitted] - Access to secretsline 1798
[Credential-related source omitted] - Network accessline 1819
def make_joblist_events(request_id, url="https://www.zhipin.com/wapi/zpgeek/search/joblist.json?_=1"): - Network accessline 2340
base_job_id = hashlib.md5( "https://www.zhipin.com/job_detail/e1.html".encode() - Network accessline 2341
"https://www.zhipin.com/job_detail/e1.html".encode()
tests/test_job_summary.py
- Executable scriptline 1
Executable file
uv.lock
- Network accessline 30
name = "certifi" version = "2026.5.20" source = { registry = "https://pypi.org/simple" } - Network accessline 31
version = "2026.5.20" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69 - Network accessline 32
source = { registry = "https://pypi.org/simple" } - Network accessline 33
sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = - Network accessline 34
wheels = [ { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902 - Network accessline 35
{ url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size - Network accessline 39
name = "charset-normalizer" version = "3.4.7" source = { registry = "https://pypi.org/simple" } - Network accessline 40
version = "3.4.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256 - Network accessline 41
source = { registry = "https://pypi.org/simple" } - Network accessline 42
sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", - Network accessline 43
wheels = [ { url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb - Network accessline 44
{ url = "https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c4559 - Network accessline 45
{ url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha25 - Network accessline 46
{ url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha25 - Network accessline 47
{ url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d - Network accessline 48
{ url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c - Network accessline 49
{ url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb39 - Network accessline 50
{ url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf - Network accessline 51
{ url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b8 - Network accessline 52
{ url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434 - Network accessline 53
{ url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0a - Network accessline 54
{ url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df - Network accessline 55
{ url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc91 - Network accessline 56
{ url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fe - Network accessline 57
{ url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6f - Network accessline 58
{ url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce - Network accessline 59
{ url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc92372 - Network accessline 60
{ url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d7 - Network accessline 61
{ url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha25 - Network accessline 62
{ url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha25 - Network accessline 63
{ url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532b - Network accessline 64
{ url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2 - Network accessline 65
{ url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe4 - Network accessline 66
{ url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4 - Network accessline 67
{ url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8 - Network accessline 68
{ url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36 - Network accessline 69
{ url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2 - Network accessline 70
{ url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b43 - Network accessline 71
{ url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b - Network accessline 72
{ url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6a - Network accessline 73
{ url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301 - Network accessline 74
{ url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e8 - Network accessline 75
{ url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096 - Network accessline 76
{ url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2 - Network accessline 77
{ url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha25 - Network accessline 78
{ url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha25 - Network accessline 79
{ url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac - Network accessline 80
{ url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5 - Network accessline 81
{ url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f962 - Network accessline 82
{ url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497 - Network accessline 83
{ url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86dd - Network accessline 84
{ url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4b - Network accessline 85
{ url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df286 - Network accessline 86
{ url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2d - Network accessline 87
{ url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf32 - Network accessline 88
{ url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549 - Network accessline 89
{ url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b851866 - Network accessline 90
{ url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a02 - Network accessline 91
{ url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e060 - Network accessline 92
{ url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a - Network accessline 93
{ url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha25 - Network accessline 94
{ url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha25 - Network accessline 95
{ url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec - Network accessline 96
{ url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e - Network accessline 97
{ url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d8 - Network accessline 98
{ url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b22 - Network accessline 99
{ url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770 - Network accessline 100
{ url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571 - Network accessline 101
{ url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b2 - Network accessline 102
{ url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4 - Network accessline 103
{ url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606 - Network accessline 104
{ url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d527 - Network accessline 105
{ url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc3 - Network accessline 106
{ url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa7 - Network accessline 107
{ url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4d - Network accessline 108
{ url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6 - Network accessline 109
{ url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha25 - Network accessline 110
{ url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha25 - Network accessline 111
{ url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7154 - Network accessline 112
{ url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b - Network accessline 113
{ url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59 - Network accessline 114
{ url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b8 - Network accessline 115
{ url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef05472 - Network accessline 116
{ url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53f - Network accessline 117
{ url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57d - Network accessline 118
{ url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee73 - Network accessline 119
{ url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd6 - Network accessline 120
{ url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05a - Network accessline 121
{ url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410 - Network accessline 122
{ url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab662 - Network accessline 123
{ url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba - Network accessline 124
{ url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced9 - Network accessline 125
{ url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha2 - Network accessline 126
{ url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha2 - Network accessline 127
{ url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89 - Network accessline 128
{ url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256: - Network accessline 129
{ url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9 - Network accessline 130
{ url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43ce - Network accessline 131
{ url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97a - Network accessline 132
{ url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284 - Network accessline 133
{ url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d5518 - Network accessline 134
{ url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82b - Network accessline 135
{ url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164 - Network accessline 136
{ url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e - Network accessline 137
{ url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615 - Network accessline 138
{ url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a2737 - Network accessline 139
{ url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a7 - Network accessline 140
{ url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d" - Network accessline 144
name = "idna" version = "3.18" source = { registry = "https://pypi.org/simple" } - Network accessline 145
version = "3.18" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654 - Network accessline 146
source = { registry = "https://pypi.org/simple" } - Network accessline 147
sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, - Network accessline 148
wheels = [ { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2" - Network accessline 149
{ url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, - Network accessline 153
name = "requests" version = "2.34.2" source = { registry = "https://pypi.org/simple" } - Network accessline 154
version = "2.34.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - Network accessline 155
source = { registry = "https://pypi.org/simple" } - Network accessline 160
{ name = "urllib3" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104 - Network accessline 161
] sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = - Network accessline 162
sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 14 - Network accessline 163
wheels = [ { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e - Network accessline 164
{ url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = - Network accessline 168
name = "urllib3" version = "2.7.0" source = { registry = "https://pypi.org/simple" } - Network accessline 169
version = "2.7.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b6 - Network accessline 170
source = { registry = "https://pypi.org/simple" } - Network accessline 171
sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 4336 - Network accessline 172
wheels = [ { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276 - Network accessline 173
{ url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 13 - Network accessline 177
name = "websocket-client" version = "1.9.0" source = { registry = "https://pypi.org/simple" } - Network accessline 178
version = "1.9.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9 - Network accessline 179
source = { registry = "https://pypi.org/simple" } - Network accessline 180
sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", si - Network accessline 181
wheels = [ { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529 - Network accessline 182
{ url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef",
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 183 facts
- Access to secrets in prose of documentationAGENTS.md:50Low confidence
- Network access in code of documentationCONTRIBUTING.md:17Low confidence
- Network access in prose of documentationCONTRIBUTING.md:27Low confidence
- Network access in prose of documentationCONTRIBUTING.md:45Low confidence
- Network access in prose of documentationCONTRIBUTING.md:69Low confidence
- Network access in prose of documentationREADME.en.md:5Low confidence
- Network access in prose of documentationREADME.en.md:6Low confidence
- Network access in prose of documentationREADME.en.md:7Low confidence
- Network access in prose of documentationREADME.en.md:8Low confidence
- Network access in prose of documentationREADME.en.md:10Low confidence
- Network access in prose of documentationREADME.en.md:18Low confidence
- Network access in code of documentationREADME.en.md:25Low confidence
- Network access in code of documentationREADME.en.md:26Low confidence
- Network access in code of documentationREADME.en.md:79Low confidence
- Network access in code of documentationREADME.en.md:80Low confidence
- Network access in prose of documentationREADME.en.md:92Low confidence
- Network access in code of documentationREADME.en.md:97Low confidence
- Network access in code of documentationREADME.en.md:98Low confidence
- Network access in code of documentationREADME.en.md:99Low confidence
- Network access in code of documentationREADME.en.md:100Low confidence
- Network access in code of documentationREADME.en.md:101Low confidence
- Network access in code of documentationREADME.en.md:102Low confidence
- Network access in code of documentationREADME.en.md:103Low confidence
- Network access in code of documentationREADME.en.md:104Low confidence
- Network access in code of documentationREADME.en.md:105Low confidence
- Network access in code of documentationREADME.en.md:112Low confidence
- Network access in prose of documentationREADME.en.md:123Low confidence
- Network access in prose of documentationREADME.en.md:127Low confidence
- Network access in code of documentationREADME.en.md:138Low confidence
- Network access in code of documentationREADME.en.md:139Low confidence
- Network access in code of documentationREADME.en.md:140Low confidence
- Network access in code of documentationREADME.en.md:141Low confidence
- Network access in code of documentationREADME.en.md:143Low confidence
- Network access in prose of documentationREADME.en.md:162Low confidence
- Network access in code of documentationREADME.en.md:165Low confidence
- Network access in code of documentationREADME.en.md:166Low confidence
- Network access in code of documentationREADME.en.md:168Low confidence
- Network access in code of documentationREADME.en.md:170Low confidence
- Network access in code of documentationREADME.en.md:171Low confidence
- Network access in code of documentationREADME.en.md:173Low confidence
- Network access in code of documentationREADME.en.md:179Low confidence
- Network access in code of documentationREADME.en.md:180Low confidence
- Access to secrets in prose of documentation: reads a credential storeREADME.en.md:228Low confidence
- Network access in prose of documentationREADME.en.md:381Low confidence
- Network access in prose of documentationREADME.en.md:387Low confidence
- Network access in prose of documentationREADME.en.md:391Low confidence
- Network access in prose of documentationREADME.md:5Low confidence
- Network access in prose of documentationREADME.md:6Low confidence
- Network access in prose of documentationREADME.md:7Low confidence
- Network access in prose of documentationREADME.md:8Low confidence
and 133 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/eatmoreduck-boss-zhipin-scraper/)