diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 3aa22ab..fd02363 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -1593,6 +1593,15 @@ dependencies = [
"match_token",
]
+[[package]]
+name = "html_scraper"
+version = "0.1.0"
+dependencies = [
+ "regex",
+ "scraper",
+ "thiserror 1.0.69",
+]
+
[[package]]
name = "http"
version = "1.3.1"
@@ -4458,6 +4467,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
name = "tms_service"
version = "0.1.0"
dependencies = [
+ "html_scraper",
"openai",
"reqwest",
"serde",
diff --git a/src-tauri/html_scraper/Cargo.toml b/src-tauri/html_scraper/Cargo.toml
new file mode 100644
index 0000000..ba90818
--- /dev/null
+++ b/src-tauri/html_scraper/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "html_scraper"
+version = "0.1.0"
+edition = "2024"
+
+[dependencies]
+scraper = "0.19.1"
+thiserror = "1.0"
+regex = "1.10.5"
\ No newline at end of file
diff --git a/src-tauri/html_scraper/src/lib.rs b/src-tauri/html_scraper/src/lib.rs
new file mode 100644
index 0000000..36630fb
--- /dev/null
+++ b/src-tauri/html_scraper/src/lib.rs
@@ -0,0 +1,73 @@
+use scraper::{Html, Selector};
+use thiserror::Error;
+use regex::Regex;
+
+/// 定义库可能返回的错误类型
+#[derive(Debug, Error)]
+pub enum ScrapeError {
+ /// 当内部使用的CSS选择器无效时返回。
+ #[error("无效的CSS选择器: {0}")]
+ InvalidSelector(String),
+ /// 当正则表达式编译失败时返回。
+ #[error("无效的正则表达式: {0}")]
+ InvalidRegex(#[from] regex::Error),
+}
+
+/// 通用函数:根据CSS选择器和链接文本查找链接。
+fn find_link_by_text(html_body: &str, selector_str: &str, link_text: &str) -> Result