#搜索引擎 #谷歌搜索 #搜索 #谷歌 #抓取 #搜索结果页面 #API 绑定

serpapi-search-rust

通过 SerpApi.com 获取 Google、Bing、Baidu、Ebay、Yahoo、Yandex、Home depot、Naver、Apple、youtube 搜索结果

2 个版本

0.1.1 2021 年 12 月 24 日
0.1.0 2021 年 12 月 23 日

#5#google-search

Download history 19/week @ 2024-03-14 16/week @ 2024-03-21 37/week @ 2024-03-28 19/week @ 2024-04-04 9/week @ 2024-04-11 14/week @ 2024-04-18 20/week @ 2024-04-25 8/week @ 2024-05-02 8/week @ 2024-05-09 11/week @ 2024-05-16 10/week @ 2024-05-23 14/week @ 2024-05-30 25/week @ 2024-06-06 23/week @ 2024-06-13 137/week @ 2024-06-20 8888/week @ 2024-06-27

9,075 每月下载量

MIT 许可证

11KB
169

SerpApi 在 Rust 中的搜索

CI serpapi-search-rust

这个 Rust 包允许从 Google、Bing、Baidu、Yandex、Yahoo、Ebay、Apple、Youtube、Naver、Home depot 等搜索引擎抓取和解析搜索结果。它由 SerpApi 提供,为所有搜索引擎提供了统一的 JSON 格式。SerpApi.com 允许进行本地化搜索,利用高级搜索引擎功能等... 在 SerpApi 上有完整的文档。

在您的 Rust 应用程序中安装,更新 Cargo.toml

serpapi-search-rust="0.1.0"

基本应用程序。

use serpapi_search_rust::serp_api_search::SerpApiSearch;
use std::collections::HashMap;
use std::env;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // read secret api key from environment variable
    // To get the key simply copy/paste from https://serpapi.com/dashboard.
    let api_key = match env::var_os("API_KEY") {
        Some(v) => v.into_string().unwrap(),
        None => panic!("$API_KEY is not set"),
    };

    println!("let's search about coffee on google");
    let mut params = HashMap::<String, String>::new();
    params.insert("q".to_string(), "coffee".to_string());
    params.insert("location".to_string(), "Austin, TX, Texas, United States".to_string());

    // initialize the search engine
    let search = SerpApiSearch::google(params, api_key);

    // search returns a JSON as serde_json::Value which can be accessed like a HashMap.
    println!("waiting...");
    let results = search.json().await?;
    let organic_results = results["organic_results"].as_array().unwrap();
    println!("results received");
    println!("--- JSON ---");
    println!(" - number of organic results: {}", organic_results.len());
    println!(" - organic_results first result description: {}", results["organic_results"][0]["about_this_result"]["source"]["description"]);
    let places = results["local_results"]["places"].as_array().unwrap();
    println!("number of local_results: {}", places.len());
    println!(" - local_results first address: {}", places[0]["address"]);

    // search returns text
    println!("--- HTML search ---");
    let raw = search.html().await?;
    print!(" - raw HTML size {} bytes\n", raw.len());
    print!(" - async search completed with {}\n", results["search_parameters"]["engine"]);

    // // edit the location in the search
    // println!("--- JSON search with a different location ---");
    // params = HashMap::<String, String>::new();
    // params.insert("location".to_string(), "Destin, Florida, United States".to_string());
    // search = SerpApiSearch::google(params, api_key);
    // let results = search.json().await?;
    // println!(">> search_parameters: {}", results["search_parameters"]);
    // let places = results["local_results"]["places"].as_array().unwrap();
    // println!("number of local_results: {}\n", places.len());
    // println!("local_results first address: {}\n", places[0]["address"]);

    print!("ok");
    Ok(())
}

运行示例

cargo build --example google_search_example

文件: (examples/google_search_example.rs)

关键字 google 可以替换为任何支持的搜索引擎

  • google
  • baidu
  • bing
  • duckduckgo
  • yahoo
  • yandex
  • ebay
  • youtube
  • walmart
  • home_depot
  • apple_app_store
  • naver

运行测试。

cargo test

有关如何构建参数 HashMap 的更多信息,请参阅 serpapi.com 文档

技术特性

  • 使用 Serde JSON 动态 JSON 解码
  • 使用 tokio 和 reqwest 的异步 HTTP 请求处理方法
  • 使用 Tokio 的异步测试

待办事项

  • 更多测试以关闭代码覆盖率(每个搜索引擎)
  • 添加更多示例
  • 更好的文档

依赖项

~5–18MB
~256K SLoC