Search the web, rank results, fetch any page content.
Project description
SkySearch
基于 Bing 搜索 + DrissionPage 动态渲染的搜索服务,核心优势是能抓取 JS 动态加载的内容(知乎、SPA、单页应用等)。
DrissionPage:Python 轻量级网页自动化库,比 Selenium 更轻,支持 JS 动态渲染。
特性
- Bing 搜索:SessionPage 底层 TLS 指纹伪装,绕过反爬
- 动态页面抓取:Chromium 无头渲染,支持 SPA / 懒加载 / 反爬较强的动态站
- 结构化输出:
mode=info返回完整 JSON(title、text、links、meta) - CLI + Python API:命令行直接用,也可用作库
安装
pip install skysearch
标准工作流
推荐:search_bare → 判断 URL → fetch(mode=info)
search_bare(num=30) → 人工/agent判断URL → fetch(mode=info) → 完整结构化数据
为什么不用 search? search 会抓取所有结果页面做 BM25 排名,慢且没必要——search_bare 够快,fetch 按需抓取更灵活。
为什么 mode=info? text 模式依赖 readability 清洗,会删减部分正文内容。info 返回完整结构化数据,更适合 agent 处理。
命令行使用
search_bare(推荐)
# 纯搜索,不抓页面不排名(快)
skysearch "浙江大学 录取 分数线" --bare -n 10
# num 建议:日常 10,批量研究 20~30,深度调研最多 50
skysearch "Python教程" --bare -n 30
URL 抓取
# 结构化信息(推荐)
skysearch --url https://example.com --mode info
# 原始 HTML
skysearch --url https://example.com --mode raw
# 调试:打开浏览器窗口
skysearch --url https://example.com --mode info --headed
搜索 + 抓取(不推荐,慢)
# 搜索 + BM25 排名,所有结果页面都会被抓取,慢
skysearch "关键词" -n 10
Python API
import skysearch
# Step 1:search_bare 批量搜索(快)
results = skysearch.search_bare("浙江大学 录取 分数线", num=30)
# [{'title': ..., 'url': ..., 'snippet': ...}, ...]
# Step 2:判断 URL 后,按需抓取
info = skysearch.fetch("https://example.com", mode='info')
# {'url': ..., 'title': ..., 'text': ..., 'links': [...], 'meta': {...}}
中文搜索注意
skysearch 对中文词边界敏感。短词查询会被错误切分:
| 查询 | 结果 |
|---|---|
浙大2024分数线 |
切词错误,答非所问 |
浙江大学 录取 分数线 |
精准命中多条相关内容 |
规则:中文查询时,在词与词之间加空格,模拟分词效果。
API 参考
search_bare(query, num=10)
| 参数 | 说明 | 默认值 |
|---|---|---|
| query | 搜索关键词(中文建议手动分词加空格) | - |
| num | 结果数量(支持分页,建议不超过 50) | 10 |
返回:纯 Bing 结果列表(快速,不抓页面不排名)
fetch(url, mode='info', keep=False, timeout=10, retry=2, headless=True)
| 参数 | 说明 | 默认值 |
|---|---|---|
| url | 页面 URL | - |
| mode | info(推荐)/text/raw |
info |
| keep | 保持浏览器打开 | False |
| timeout | 请求超时秒数 | 10 |
| retry | 重试次数 | 2 |
| headless | 无头浏览器(默认 True) | True |
search_and_fetch(query, num=10, mode='info', verbose=False, keep=False, headless=True)
搜索 + 抓取一体化,返回列表包含结果信息和抓取内容。
fetch 的三种 mode
| 模式 | 说明 | 推荐度 |
|---|---|---|
info |
结构化 JSON(url, title, text, links, meta) | ✅ 推荐 |
text |
清洗后正文,内容可能被删减 | ❌ 不推荐 |
raw |
原始 HTML,数据量大 | 按需 |
技术栈
| 模块 | 技术 |
|---|---|
| HTTP 请求 | DrissionPage (SessionPage) |
| 动态渲染 | DrissionPage (ChromiumPage) |
| HTML 解析 | BeautifulSoup4 + lxml |
| 正文提取 | readability-lxml |
项目结构
skysearch/
├── api.py # 简洁 API 接口
├── cli.py # 命令行入口
├── search.py # Bing 搜索(含分页)
├── ranker.py # BM25 排序
└── fetcher/ # 页面抓取包
├── core.py # 核心函数
├── session.py # 会话管理
└── parser.py # HTML 解析
License
MIT
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skysearch-0.4.0.tar.gz.
File metadata
- Download URL: skysearch-0.4.0.tar.gz
- Upload date:
- Size: 12.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0dcc391e9587ed63e8ef93bbe6386665a0e29f34088bf0ed8562e7bf94f3058e
|
|
| MD5 |
7a4eba1587ff72d47b8c4a2126ed978d
|
|
| BLAKE2b-256 |
0a845abd3a168c0872581daab1898f375140f7266f2d397d53aae6cd6d4167fd
|
File details
Details for the file skysearch-0.4.0-py3-none-any.whl.
File metadata
- Download URL: skysearch-0.4.0-py3-none-any.whl
- Upload date:
- Size: 13.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0f4628498f4162d6b527ca27d03ed67f95bd405525b6d57de6708ae24e87d86
|
|
| MD5 |
afb1388cc597c9000b1c89025076d8b9
|
|
| BLAKE2b-256 |
d890c4f3a8a3893edf04968e4baa5160d4bcdc0198f927527bed28de60528cef
|