首页 > 编程语言 >利用Rust编程语言和tide库采集搜狗图片

利用Rust编程语言和tide库采集搜狗图片

时间:2023-11-06 17:01:04浏览次数:37  
标签:搜狗 HTTP socket mut unwrap tide let proxy Rust

利用Rust编程语言和tide库采集搜狗图片_代理服务器

今天给大家带来一个用Rust编程语言和tide库编写一个爬虫程序,主要用于采集搜狗图片。一起来学习一下吧。

```rust
// 导入所需的库
use std::io::{BufRead, BufReader};
use std::net::TcpStream;
use std::sync::mpsc;
// 定义一个消息通道来传递爬取的结果
let (sender, receiver) = mpsc::channel(1);
// 定义一个函数来处理收到的消息
fn handle_message(message: String) {
// 在此处处理收到的消息
println!("Received message: {}", message);
}
// 主函数
fn main() {
// 创建一个代理服务器的TCP套接字
let mut proxy_socket = TcpStream::connect("https://www.duoip.cn/get_proxy:8000").unwrap();
// 读取代理服务器的欢迎信息
let mut proxy_reader = BufReader::new(proxy_socket);
let mut proxy_response = String::new();
proxy_reader.read_to_string(&mut proxy_response).unwrap();
// 创建一个HTTP客户端的TCP套接字
let mut client_socket = TcpStream::connect("www.sogou.com:80").unwrap();
// 将代理服务器的欢迎信息发送给HTTP客户端
client_socket.write(proxy_response.as_bytes()).unwrap();
// 创建一个HTTP请求
let mut request = String::from("GET / HTTP/1.1\r\nHost: www.sogou.com\r\n\r\n");
// 将HTTP请求发送给HTTP客户端
client_socket.write(request.as_bytes()).unwrap();
// 读取HTTP响应
let mut response = String::new();
client_socket.read_to_string(&mut response).unwrap();
// 解析HTTP响应,提取图片的URL
let match_result = response.split("\r\n\r\n").nth(1).unwrap();
let mut images = Vec::new();
for line in match_result.split("\r\n") {
if line.starts_with("Content-Type: image/") {
images.push(line.split(": ").last().unwrap());
}
}
// 使用多通道发送图片的URL给主函数
for image in images {
sender.send(image).unwrap();
}
// 关闭TCP套接字
proxy_socket.close().unwrap();
client_socket.close().unwrap();
}
```

以上代码实现了从搜狗爬取图片的功能。程序首先创建一个代理服务器的TCP套接字和一个HTTP客户端的TCP套接字。然后,程序将代理服务器的欢迎信息发送给HTTP客户端,并创建一个HTTP请求。此外,由于本示例中的图片URL是从HTTP响应中提取的,因此在实际使用中可能需要对HTTP响应进行更复杂的解析。

标签:搜狗,HTTP,socket,mut,unwrap,tide,let,proxy,Rust
From: https://blog.51cto.com/u_14448891/8214531

相关文章

  • Rust 在可执行文件中嵌入代码版本信息
    缘起我想要最终编译出的可执行文件中包含代码仓库的版本信息fnmain(){println!("HelloRustHub");//gitrev-parse--shortHEAD letcommit_hash="6c1b45f";println!("commit_hash:{}",commit_hash);}为了自动获取这个"6c1b45f"很自然的我们可以......
  • 用Rust和Scraper库编写图像爬虫的建议
    本文提供一些有关如何使用Rust和Scraper库编写图像爬虫的一般建议:1、首先,你需要安装Rust和Scraper库。你可以通过Rustup或Cargo来安装Rust,然后使用Cargo来安装Scraper库。2、然后,你可以使用Scraper库的Crawler类来创建一个新的爬虫实例。3、接下来,你可以使用start方法来启动爬虫并......
  • 23_rust_练习
    练习编码实现一个简单的grep工具。建立项目:>cargonewminigrepCreatedbinary(application)`minigrep`package接收命令行参数usestd::env;fnmain(){//args返回一迭代器,collect将迭代器转换为Vector,需指明类型//args函数无法处理非法Unicode字符,如果......
  • [Rust] 对整形溢出的处理
    1.两种不同模式下的整形溢出坑了个爹的,书上说的没理解清楚,在Rust程序语言设计中文版3.2中提到了,当使用--release参数进行发布模式构建时,Rust不会检测导致panic的整形溢出,这里需要分两种情况考虑:编译期就可以发现的整形溢出程序运行过程中会发生的整形溢出1.1编译阶段如果......
  • 前端开发笔记[5]-rust的webassembly
    摘要基于rust开发webassembly入门,通过rust实现在网页中弹出警告框.rust的webassembly开发方式https://zhuanlan.zhihu.com/p/104299612入门Rust开发WebAssemblyRust编译为WebAssembly在前端项目中使用https://zhuanlan.zhihu.com/p/662991464相对来说,使用Rust开发......
  • 不可靠的 Rust Lifetime Elision
    众所周知,Rust编译器在分析代码的过程中,会对含有引用参数、返回值的函数、方法进行lifetime检查。经历数次版本迭代后Rust编译器发展出了一套惯用规则用于隐式推理lifetime注解(lifetimeelision),从而减小开发者的编写难度,尽可能省略不必要的lifetime注解。由于后文会涉......
  • 国货之光?用Rust编写的Vivo Blue OS
    ❝人生有两出悲剧:一是万念俱灰,另一是踌躇满志。——萧伯纳❞大家好,我是「柒八九」。前言“老乡,老乡,你看东方是不是有一轮朝阳在冉冉升起”。-一个稚嫩的声音从屋子中传来。而此时,一位佝偻着背的秃头老者正在简陋的屋子中,正无精打采的在用字迹早已模糊不清的键盘鼓捣着IDE,从电脑屏......
  • 8. 从零用Rust编写正反向代理, HTTP改造篇之HPACK原理
    wmproxywmproxy是由Rust编写,已实现http/https代理,socks5代理,反向代理,静态文件服务器,内网穿透,配置热更新等,后续将实现websocket代理等,同时会将实现过程分享出来,感兴趣的可以一起造个轮子法项目++wmproxy++gite:https://gitee.com/tickbh/wmproxygithub:https://github.com/tic......
  • Trust
    IsCybersecurityReally(VERY)Important?Peoplesometimesjusttrustthepeopletheycouldtrust,notshould,whichmeanssomebodywhohassomeactualabilitybutdoesn'thaveadegree/match/abilitythey(HR,Manager,Leader,Engineer,Officer,Scho......
  • 与c++比较学习rust3-2:数据类型
    rust的文章在数据类型数据类型标量类型整形,浮点型,布尔型,字符整形c++rustgoint8_ti8int8int16_ti16int16int32_ti32int32int64_ti64int64-i128-intisizeintunsignedintusizeuintuint8_tu8uint8uint16_tu16uint16ui......