一、开发环境及配置
使用IntelliJ IDEA在本地输写代码,然后通过IntelliJ IDEA自身的ssh功能实现远程连接linux,并上传文件到linux服务器,通过IntelliJ IDEA shell功能运行程序测试
一.配置idea SSH会话
快速创建一个SSH会话,并打开Terminal窗口
点击Tools 选择Start SSH session 如下图:
然后点击Edit credentials…
填写主机ip,用户名,密码和端口号,注意SSH会话以及SFTP的端口号为22,填写完成点击ok后会自动连接并开启Terminal窗口,熟悉的SSH会话界面就出现了,如下图:
注意:以上介绍的只是临时开启SSH会话,并且不具备SFTP功能,一旦关闭该会话窗口,刚才输入的连接信息就找不到了,该方法只适合于临时操作一下远程服务器。
第二节,配置SSH会话和SFTP文件上传
点击绿色的加号,弹出一个小窗口,添加连接名称和连接类型:
这里名称随便输入,这里以测试主机IP为连接名称,类型选择SFTP后点击ok
填写上图红框内的相关信息,注意Save password请务必勾选上。
注意:Visible only for this project是确定该会话在哪些工程中显示,勾选就只在本工程中显示该会话,不勾选就在所有的工程中显示。最下面的Web server root URL是该项目在部署后的链接,点击open可打开该项目。Root path是指定自动上传到linux服务器的路径,这里就选择测试主机的/root目录。
点击Test SFTP connection…可以测试是否可以连接上远程linux服务器
然后点击Advanced options…设置字符编码格式
将Control encoding设置成UTF-8,至于为什么,不解释…
点击ok保存
然后再点击Mappings切换到SFTP上传路径设置
Local path是本地要上传的文件路径,Deployment path是上传到服务器的路径,这里设置直接上传到/目录下,即/root目录下。再点击配置窗口的ok保存该配置信息。
现在再打开Tools下面的Start SSH session就多了一个刚才配置的会话名称
现在重启IDEA、关机,会话配置信息都不会丢失,随时连接,很方便。
第三节,SSH功能和SFTP上传功能示例操作
右键点击要上传的文件,依次选择Deployment——Upload to…
上传完成
至此配置完成,以后可以通过idea写代码并同步到liunx,通过shell编译运行代码;
二、豆瓣爬虫代码
1.使用了hyper网络库进行数据加载
2.select进行html解析
库地址请查看 https://blog.csdn.net/m0_37696990/article/details/82812729
main.rs
extern crate hyper;
extern crate select;
use std::io::Read;
use hyper::Client;
use std::fs::File;
//use std::fs::create_dir_all;
//use std::io::{BufWriter};
use select::document::Document;
use select::predicate::{ Class};
use std::error::Error;
use std::io::prelude::*;
use std::path::Path;
fn main() {
let mut start = 0;
while start < 900 {
println!("start的值:{}",start);
get_date(&mut start,);
}
}
fn get_date(start: &mut i32){
let client = Client::new();
let url = "https://movie.douban.com/subject/1866479/reviews?start=";
let num_str = format!("{0}{1}", url.to_string(), start);//拼接字符串
//println!("url{}",num_str);
let mut res = client.get(num_str.trim()).send().unwrap();
/*assert_eq!(res.status, hyper::Ok);
println!("headers:\n {}", res.headers);*/
let mut body = String::new();
res.read_to_string(&mut body).unwrap();
let htmlbody= body.trim();
/* println!("body:\n {}", htmlbody);*/
let document = Document::from(htmlbody);
let mut content = String::from("");//单页数据
for node in document.find(Class("main-bd")) {
let question = node.find(Class("short-content")).next().unwrap();
let qes_str = question.text();
let qes_str= qes_str.replace("\n","").replace("\t","").replace("\r","").replace(" ","");
let qes_str = format!("{0}{1}{2}", "start:", qes_str,"\r\n");//拼接字符串
/* content.add(qes_str);*/
&content.push_str(&qes_str);
}
let pathname = format!("{0}{1}{2}","./",start,"-page.txt" );//拼接字符串
//println!("一页内容{}",&content);
wtrie_file(&pathname,&mut content);
*start+=20;
}
//写入文件
fn wtrie_file(path:&String ,conetent:&mut String){
let path = Path::new(path);
let display = path.display();
let mut file = match File::create(&path) {
Err(why) => panic!("创建文件失败{}: {}",display, why.description()),
Ok(file) => file,
};
match file.write_all(conetent.as_bytes()) {
Err(why) => {
panic!("写入失败 {}: {}", display,
why.description())
},
Ok(_) => println!("成功写入 {}", display),
}
}
Cargo.toml
[package]
name = "hypertest2"
version = "0.1.0"
authors =
edition = "2018"
[dependencies]
hyper = "0.7.2"
select = "0.4.2"
idea terminal乱码问题
爬取页面的html内容在 idea terminal查看乱码,参照该博客http://www.cnblogs.com/sxdcgaq8080/p/9071282.html