首页 > 其他分享 >Rust语言做数据抓取代码示例

Rust语言做数据抓取代码示例

时间:2023-11-13 16:32:15浏览次数:36  
标签:示例 url 抓取 let proxy str data response Rust

这个任务需要使用到Rust语言和网络爬虫相关的库,以下是一个简单的示例代码。请注意,由于涉及到的具体问题和数据的复杂性,这个示例可能并不能直接满足你的需求,需要根据你的具体情况进行修改和扩展。

Rust语言做数据抓取代码示例_json

use reqwest;
use serde::{Deserialize, Serialize};
use serde_json::{json, Value};
use std::io::{self, BufRead, BufReader};

#[derive(Serialize, Deserialize)]
struct ResponseData {
    title: String,
    description: String,
    video_url: String,
}

fn retrieve_data(url: &str) -> Result<ResponseData, Box<dyn Error>> {
    let client = reqwest::Client::new();
    let response = client.get(url)?;
    let res_str = response.text()?;
    let res_json: Value = json::from_str(res_str)?;
    let data = res_json["data"].as_array().unwrap()[0];
    let title = data["title"].as_str().unwrap();
    let description = data["description"].as_str().unwrap();
    let video_url = data["video_url"].as_str().unwrap();
    Ok(ResponseData { title, description, video_url })
}

fn main() -> io::Result<()> {
    let proxy_host = "www.duoip.cn";
    let proxy_port = 8000;
    let proxy = "http://{}:{}".to_string().replace(" ", "%20");
    let url = "B站/videoid/BV1qy411t7e3";
    let response = retrieve_data(&url)?;
    println!("Title: {}", response.title);
    println!("Description: {}", response.description);
    println!("Video URL: {}", response.video_url);

    let proxy_client = reqwest::Client::new();
    proxy_client.set_proxy(proxy.to_string())?;
    let response = proxy_client.get(url)?;
    let res_str = response.text()?;
    println!("Proxy response: {}", res_str);

    Ok(())
}

这个示例代码首先定义了一个ResponseData结构体,用于存储从B站获取的视频标题、描述和视频URL。然后定义了一个retrieve_data函数,用于从B站获取视频数据。这个函数首先创建一个reqwest客户端,然后使用这个客户端发送一个GET请求到B站的视频URL,然后获取响应的文本,然后解析这个文本为JSON格式,然后获取JSON数据中第一个元素的数据,然后获取这个数据中的标题、描述和视频URL,最后返回一个包含这些信息的ResponseData结构体。

main函数中,首先设置了爬虫ip信息,然后定义了一个URL,然后调用retrieve_data函数获取这个URL的视频数据,并打印出这些数据。然后创建了一个reqwest客户端,并设置了爬虫ip信息,然后使用这个客户端发送一个GET请求到B站的视频URL,然后获取响应的文本,并打印出这个文本。

注意,这个示例代码没有处理任何错误,也没有处理任何复杂的网络问题,例如网络延迟、网络中断等,实际使用时需要对这些情况进行处理。

标签:示例,url,抓取,let,proxy,str,data,response,Rust
From: https://blog.51cto.com/u_13488918/8345984

相关文章

  • bat批处理常用系统信息、命令、语法、示例
    Windows下使用批处理设置东西,是很方便的事。一、获取系统信息1.获取CPU信息echo%PROCESSOR_ARCHITECTURE:~%系统CPU是AMD牌子,64位的1.1)获取CPU品牌echo%PROCESSOR_ARCHITECTURE:~0,3%1.2)获取CPU位数echo%PROCESSOR_ARCHITECTURE:~3%或echo%PROCESSOR_ARCHITEC......
  • 微服务系列-使用WebFlux的WebClient进行Spring Boot 微服务通信示例
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。概述在之前的教程中,我们看到了使用RestTemplate的SpringBoot微服务通信示例。从5.0开始,RestTemplate处于维护模式,很快就会被弃用。因此Spring团队建议使用org.springframework.web.reac......
  • 通过PowerShellPlus示例脚本学习Powershell
    ##=====================================================================##Title:DisconnectVI-Server##Description:DisconnectsfromaVIserver##Author:Idera##Date:9/11/2008##Input:-VIserver:VirtualInfrastructu......
  • Rust写的爬虫代码抓取精美的图片
    Rust是一种系统级编程语言,它的设计目标是安全、并发和高效。Rust的爬虫库非常丰富,例如scraper、select、reqwest等等。这些库提供了许多功能,例如HTML解析、HTTP请求、异步处理等等,使得Rust成为一个非常适合编写爬虫的语言。以下是一个使用reqwest和scraper库编写的简单爬虫示例,用于......
  • openWRT构建helloworld示例
    概述版本号:OpenWrt18.06.2,r7676-cddd7b4c77helloworld示例参考:OpenWrt:构建helloworld应用1.在package目录下新建helloworld文件夹,存放helloworld应用程序。$treehelloworld/helloworld/├──Makefile#openwrt规则Makefile└──src├──helloworld.c......
  • rust 程序设计笔记(2)所有权 & 引用
    所有权数据存储在栈和堆上,存放在栈上的数据都是已知所占据空间的突然的问题//内存中的栈是怎么存储数据的?好的,想象一下你有一摞盘子。你只能从上面放盘子,也只能从上面拿盘子,这就是栈的工作方式。在内存中,栈是用来存储数据的地方,它工作得就像这摞盘子。当你的程序运行......
  • rustbook-ch1-入门指南-总结
    rustbook-ch1-入门指南-总结1、安装rust之前需要安装一个C语言编译器。正常编译、执行rust程序,需要一个链接器。由于C语言编译器通常都会附带链接器,所以需要安装一个C语言编译器。除了编译执行需要链接器外,一部分常用的Rust包会依赖使用C语言编写的代码,为了编译这些Rust代码,也需......
  • C#断点续传的实现示例
    断点续传是一种可以在文件传输过程中出现断电、网络故障等情况时,能够保证传输内容不会全部丢失,而是可以从已传输的位置继续传输的机制。在文件传输较大、较复杂的情况下,使用断点续传可以提高传输质量、稳定性和效率。在C#中,可以使用HTTP协议的Range头部域来实现断点续传。使用HTT......
  • rust 程序设计笔记(1)
    简介-Rust程序设计语言简体中文版helloworld&rust相关工具使用helloworldrustcrustc--versioncomplie.rsprogrammain()entrypointallblockswrappedby{}cargocargoisapackagemanagerforrustcmdcargo--versioncargonewproj-name......
  • docker-compose自建RustDesk远程控制服务器
    github: rustdesk/rustdesk-server:RustDeskServerProgram(github.com)一、创建  docker-compose.yml 文件,复制以下 docker-compose配置文件内容到文件version:'3'networks:rustdesk-net:external:falseservices:hbbs:container_name:hbbspo......