__pycache__ | ||
.gradio | ||
out1 | ||
_init__.py | ||
main.py | ||
models.py | ||
nohup.out | ||
parse_results.py | ||
README.md | ||
search_plus.py | ||
search_queries.py | ||
search_ui_v2.py | ||
search_ui.py | ||
server.log | ||
testapi.py | ||
util_old.py | ||
utils.py |
项目说明文档
目录
1. util_old.py
该文件包含一些用于网络爬取、文件处理和数据保存的实用函数。
主要功能
fetch_documents(ip_address, dataset_id, api_key)
:- 从指定的 API 端点获取文档数据。
- 使用
requests
库发送 HTTP GET 请求。 - 处理 HTTP 错误和其它异常。
- 返回 JSON 格式的响应数据。
is_file(url)
:- 检查给定的 URL 是否指向一个文件(基于文件扩展名)。
- 使用预定义的文件扩展名集合
file_extensions
进行判断。
is_webpage(url)
:- 检查给定的 URL 是否指向一个网页。
- 通过检查
Content-Type
头是否包含text/html
来判断。
can_crawl_webpage(url)
:- 判断一个网页是否适合爬取。
- 使用
BeautifulSoup
解析网页内容。 - 检查否存在大量 JavaScript 代码、页面内容是否主要是乱码或图片、以及是否存在
meta robots
标签阻止爬取。 - 使用
langdetect
库检测页面语言是否为中文。
is_cosmetic_related(snippet)
:- 检查给定的文本片段是否与化妆品相关。
- 使用预定义的关键词列表进行判断。
parse_search(result)
:- 解析搜索结果,判断链接类型(文件、网页或未知类型)。
- 根据链接类型返回相应的描述字符串。
save_webpage_content(url, engine, search_id, output_dir, pool)
:- 保存网页内容到本地文件,并将相关信息记录到数据库。
- 使用
BeautifulSoup
提取网页文本内容。 - 检查网页是否已保存,避免重复保存。
download_file(url, engine, search_id, output_dir, pool)
:- 下载文件到本地,并将相关信息记录到数据库。
- 检查文件是否已下载,避免重复下载。
save_non_crawlable(url, engine, search_id, pool)
:- 将无法爬取的链接保存到数据库的黑名单中。
- 避免重复保存。
get_blacklist(pool)
:- 从数据库中获取黑名单列表。
libreoffice_to_pdf(file_path, output_dir)
:- 使用 LibreOffice 将文件转换为 PDF 格式。
- 处理文件不存在和转换失败的情况。
pdf_to_images(pdf_path, output_dir)
:- 将 PDF 文件逐页转换为图像。
- 使用
pdf2image
库进行转换。 - 强制清理每页处理后的内存。
process_files(base_dir)
:- 遍历指定目录下的所有文件,处理 PPT/PPTX、XLS/XLSX、DOC/DOCX 和 PDF 文件。
- 将这些文件转换为 PDF 格式,并将 PDF 文件转换为图像。
依赖库
bs4
(BeautifulSoup4)os
gc
requests
langdetect
langchain_core
langchain.text_splitter
pdf2image
typing
2. utils.py
该文件包含一些用于判断 URL 类型和内容是否相关的实用函数。
主要功能
is_file(url)
:- 检查给定的 URL 是否指向一个文件(基于文件扩展名)。
- 使用预定义的文件扩展名集合
file_extensions
进行判断。
is_webpage(url)
:- 检查给定的 URL 是否指向一个网页。
- 通过检查
Content-Type
头是否包含text/html
来判断。
can_crawl_webpage(url)
:- 判断一个网页是否适合爬取。
- 使用
BeautifulSoup
解析网页内容。 - 检查是否存在
meta robots
标签阻止爬取。
is_cosmetic_related(snippet)
:- 检查给定的文本片段是否与化妆品相关。
- 使用预定义的关键词列表进行判断。
parse_search(result)
:- 解析搜索结果,判断链接类型(文件、网页或未知类型)。
- 根据链接类型返回相应的描述字符串。
依赖库
bs4
(BeautifulSoup4)requests
3. search_ui.py
该文件使用 Gradio 库创建一个 Web UI,用于执行多搜索引擎聚合搜索。
主要功能
SearchUI
类:__init__
: 初始化 API 密钥。parse_google_results(results)
: 解析 Google 搜索结果,提取标题、链接、摘要和位置信息。parse_bing_results(results)
: 解析 Bing 搜索结果,提取标题、链接、摘要和位置信息。parse_baidu_results(results)
: 解析百度搜索结果,提取标题、链接、摘要和位置信息,并处理百度特有的answer_box
。format_results(results)
: 将解析后的搜索结果格式化为 Markdown 文本。search_all_engines(query)
: 在 Google、Bing 和 Baidu 三个搜索引擎中执行搜索,并返回格式化后的结果。
create_ui()
函数:- 创建
SearchUI
实例。 - 定义自义 CSS 样式,用于美化 UI。
- 使用 Gradio 创建 Web UI,包括搜索输入框、搜索按钮、加载动画和搜索结果展示区域。
- 定义搜索事件处理函数,用于在搜索时显示加载动画,并在搜索完成后更新搜索结果。
- 创建
依赖库
gradio
json
typing
requests
4. main.py
该文件使用 FastAPI 创建一个 API,用于处理搜索请求和批量搜索请求。
主要功能
- 数据库连接配置:
- 定义数据库连接参数。
- API 端点:
/search/
: 接收单个搜索请求,并返回搜索结果。/batch_search/
: 接收批量搜索请求,并返回搜索结果。
- 数据模型:
SearchRequest
: 定义单个搜索请求的数据模型。SearchResult
: 定义单个搜索结果的数据模型。BatchSearchRequest
: 定义批量搜索请求的数据模型。SearchResultItem
: 定义批量搜索结果中单个搜索结果的数据模型。BatchSearchResponse
: 定义批量搜索响应的数据模型。
fetch_all_content(query)
:- 从数据库中获取与查询相关的已保存网页内容。
save_user_query(query, result_count)
:- 将用户查询记录保存到数据。
search(request)
:- 接收单个搜索请求,首先尝试从数据库获取结果,如果数据库中没有结果,则调用
search_plus
模块进行搜索。 - 保存用户查询记录。
- 接收单个搜索请求,首先尝试从数据库获取结果,如果数据库中没有结果,则调用
batch_search(request)
:- 接收批量搜索请求,并使用 SerpAPI 在 Google、Bing 和 Baidu 中执行搜索。
- 返回包含所有搜索结果的响应。
依赖库
fastapi
pydantic
aiomysql
requests
search_plus
datetime
json
5. search_plus.py
该文件包含用于执行搜索并将结果保存到数据库的函数。
主要功能
- 数据库连接配置:
- 定义数据库连接参数。
search_and_save(query)
:- 在 Google、Bing 和 Baidu 三个搜索引擎中执行搜索。
- 将搜索结果以 JSON 字符串的形式保存到数据库的
web_search_results
表中。
main(queries)
:- 接收一个查询列表,并对每个查询调用
search_and_save
函数。
- 接收一个查询列表,并对每个查询调用
依赖库
fastapi
pydantic
databases
requests
json
datetime
6. search_queries.py
该文件用于定时执行搜索任务。
主要功能
- 定时执行:
- 该脚本配置为通过 Ubuntu 系统的定时任务 (crontab) 在每周日 0 点定时执行。它从数据库中读取预定义的查询列表,并使用
search_plus.py
中的main
函数执行搜索,并将结果保存到数据库。 设置方法见下文 "Crontab 设置说明" 部分。
- 该脚本配置为通过 Ubuntu 系统的定时任务 (crontab) 在每周日 0 点定时执行。它从数据库中读取预定义的查询列表,并使用
依赖库
aiomysql
search_plus
datetime
Crontab 设置说明
-
打开 crontab 编辑器: 使用命令
crontab -e
打开 crontab 编辑器。 如果这是你第一次使用 crontab,系统会询问你使用哪个编辑器 (例如 vim 或 nano)。 -
添加定时任务: 在编辑器中添加以下一行,以在每周日 0 点执行
search_queries.py
脚本:0 0 * * 0 /usr/bin/python3 /path/to/your/search_queries.py # 请替换 /path/to/your/ 为你的脚本实际路径 ``` * `0 0 * * 0`: 表示每天的 0 分 0 秒,每周日执行 (0 代表星期日)。 你可以根据需要修改这个时间表达式。 更多关于 crontab 时间表达式的资料,请参考 `man 5 crontab`。 * `/usr/bin/python3`: 指定 Python3 解释器。 如果你的 Python3 解释器不在这个路径,请修改为正确的路径。 * `/path/to/your/search_queries.py`: 替换为 `search_queries.py` 脚本的完整路径。
-
保存并退出: 保存 crontab 文件并退出编辑器。
-
查看 crontab 设置: 使用命令
crontab -l
查看当前已设置的 crontab 任务。 你应该能够看到你刚刚添加的那一行。 -
验证定时任务: 为了验证定时任务是否正确设置,你可以尝试在
search_queries.py
脚本中添加日志记录功能,例如使用logging
模块记录执行时间和相关信息。 然后,你可以等待到下一个星期日 0 点,查看日志文件,确认脚本是否被正确执行。 如果脚本没有执行,请检查脚本路径、Python 解释器路径以及 crontab 时间表达式是否正确。 你也可以使用tail -f /path/to/your/logfile
实时监控日志文件。
7. search_ui_v2.py
该文件使用 Gradio 库创建一个 Web UI,用于执行多搜索引擎聚合搜索,并提供更高级的功能。
主要功能
SearchUI
类:__init__
: 初始化 API 密钥。parse_google_results(results)
: 解析 Google 搜索结果,提取标题、链接、摘要和位置信息。parse_bing_results(results)
: 解析 Bing 搜索结果,提取标题、链接、摘要和位置信息。parse_baidu_results(results)
: 解析百度搜索结果,提取标题、链接、摘要和位置信息,并处理百度特有的answer_box
。format_results(results)
: 将解析后的搜索结果格式化为 Markdown 文本。search_all_engines(query)
: 在 Google、Bing 和 Baidu 三个搜索引擎中执行搜索,并返回格式化后的结果。save_search_results(query, results)
: 将搜索结果保存到数据库。
create_ui()
函数:- 创建
SearchUI
实例。 - 定义自义 CSS 样式,用于美化 UI。
- 使用 Gradio 创建 Web UI,包括搜索输入框、搜索按钮、加载动画、搜索结果展示区域和保存搜索结果的选项。
- 定义搜索事件处理函数,用于在搜索时显示加载动画,并在搜索完成后更新搜索结果。
- 定义保存搜索结果的事件处理函数,用于将搜索结果保存到数据库。
- 创建
界面结构
- 标题: 显示"九鑫多搜索引擎聚合搜索"。
- 搜索输入框: 一个文本框,用于输入搜索关键词。
- 搜索按钮: 一个按钮,点击后开始搜索。
- 加载动画: 搜索过程中显示一个GIF动画,提示用户正在等待结果。搜索完成后自动隐藏。
- 搜索结果展示区域: 分为三个部分,分别显示Google、Bing和百度搜索结果。每个部分都以HTML卡片的形式展示搜索结果,包含标题、链接和摘要。点击卡片中的链接会在新标签页打开搜索结果页面。每个搜索引擎的结果区域都有各自的边框颜色,方便区分。
操作方法
- 输入关键词: 在搜索输入框中输入你想要搜索的内容。
- 点击搜索: 点击"搜索"按钮。此时加载动画会显示。
- 查看结果: 搜索完成后,加载动画会消失,Google、Bing和百度的搜索结果会分别显示在各自的区域内。每个搜索结果以卡片形式呈现,点击卡片即可打开对应的链接。
功能说明
该UI使用SerpAPI接口在Google、Bing和百度三个搜索引擎上进行搜索。它会解析搜索结果,并以用户友好的方式展示。界面使用了自定义CSS样式,使界面更美观易用。程序还包含错误处理机制,如果搜索过程中出现错误,会显示相应的错误信息。
总而言之,这是一个功能完善、界面友好的多搜索引擎聚合搜索工具。用户只需输入关键词并点击搜索按钮,即可快速获得来自三个不同搜索引擎的搜索结果。
依赖库
gradio
json
typing
requests
aiomysql