#google-search #search #google #page #results #crawl

search_with_google

一个简单的库,用于抓取Google搜索页面

8个版本 (4个破坏性更新)

0.5.0 2020年9月2日
0.4.1 2020年7月21日
0.3.1 2020年7月2日
0.2.2 2020年6月30日
0.1.0 2020年6月28日

#7 in #crawl

MIT许可证

12KB
269

search_with_google

一个简单的库,可以抓取Google搜索结果页面

用法

注意

如果你是从V 0.2.x版本来的,将 use search_with_google::search; 替换为 use search_with_google::blocking::search;

将以下内容添加到 Cargo.toml

[dependencies]
search_with_google = "0.5"

用于常规 blocking

use search_with_google::blocking::search;
let results = search("rust", 3, None);
if let Ok(result_list) = results {
    println!("Title : {}\nLink : {}", result_list[0].title, result_list[0].link);
}

用于 async

use search_with_google::search;
let results = search("rust", 3, None).await;
if let Ok(result_list) = results {
    println!("Title : {}\nLink : {}", result_list[0].title, result_list[0].link);
}

如果你打算重复搜索,可以创建一个Client。

用于常规 blocking

use search_with_google::blocking::Client;
let client = Client::default();

let results = client.search("rust", 3, None);
if let Ok(result_list) = results {
    println!("Title : {}\nLink : {}", result_list[0].title, result_list[0].link);
}

用于 async

use search_with_google::Client;

let client = Client::default();
let results = client.search("rust", 3, None).await;
if let Ok(result_list) = results {
     println!("Title : {}\nLink : {}", result_list[0].title, result_list[0].link);
}

这里第二个和第三个参数是

  • limit: u32 -> 获取的最大搜索结果数量(默认:10)
  • agent: String -> 要使用的用户代理(默认: "Mozilla/5.0 (X11; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0".to_string())

你可以传递 None 任何一个以使用默认值

SearchResult 是一个具有 titlelinkdescriptiondescription_rawstructtitle 是搜索结果标题,link 是搜索结果的主要URL,description 是在Google搜索结果屏幕上显示的小描述,description_raw 是相同的描述,但它包含HTML标签,如 <em><span>&nbsp 等,这些标签不包括在主要描述中

pub struct SearchResult {
    pub link: String,
    pub title: String,
    pub description: String,
    pub description_raw: String,
}

变更日志

0.1.0 -> 0.2.2

  • option 现在是 limit
  • 你现在可以指定用户代理
  • 你现在可以直接传递可选参数,如 limit: u32、agent: String,而不是 Some(limit) 等。
  • SearchError 现在是 Error

0.2.2 -> 0.3.1

  • async 选项可用,使用 use search_with_google::search;
  • blocking 选项可用,与 use search_with_google::blocking::search;
  • 正确实现了 std::error::Error

0.3.1 -> 0.4.1

  • Client 用于重复搜索,Client::default()blocking::Client::default()
  • 结果中的 description_raw 字段

0.4.1 -> 0.5.0

  • Error 现在是一个枚举,包含 IoErrorReqwestError 变体

致谢

基于 google-somethin

依赖关系

~9–19MB
~279K SLoC