#下载 #4chan #爬虫 #cli #4plebs

bin+lib chan-downloader

用于下载4chan线程中所有图像/webm的命令行工具

11个版本

0.3.0 2022年8月22日
0.2.0 2021年1月6日
0.1.8 2021年1月3日
0.1.1 2019年7月27日

#2409命令行工具

MIT 许可证

25KB
434

chan-downloader

用Rust编写的4chan-downloader的克隆版本

用于下载4chan线程中所有图像/webm的命令行工具。

如果使用重载标志,则不会重新下载之前保存的图像。

使用选项 -c 4 (4个并发下载) 获得最佳结果。

USAGE:
    chan-downloader [FLAGS] [OPTIONS] --thread <thread>

FLAGS:
    -h, --help       Prints help information
    -r, --reload     Reload thread every t minutes to get new images
    -V, --version    Prints version information

OPTIONS:
    -c, --concurrent <concurrent>    Number of concurrent requests (Default is 2)
    -i, --interval <interval>        Time between each reload (in minutes. Default is 5)
    -l, --limit <limit>              Time limit for execution (in minutes. Default is 120)
    -o, --output <output>            Output directory (Default is 'downloads')
    -t, --thread <thread>            URL of the thread

chan_downloader

您还可以使用chan_downloader库

save_image

将图像从URL保存到指定的路径。成功时返回路径

use reqwest::Client;
use std::env;
use std::fs::remove_file;
let client = Client::new();
let workpath = env::current_dir().unwrap().join("1489266570954.jpg");
let url = "https://i.4cdn.org/wg/1489266570954.jpg";
let answer = chan_downloader::save_image(url, workpath.to_str().unwrap(), &client).unwrap();

assert_eq!(workpath.to_str().unwrap(), answer);
remove_file(answer).unwrap();

get_page_content

从给定的URL返回页面内容。

use reqwest::Client;
let client = Client::new();
let url = "https://boards.4chan.org/wg/thread/6872254";
match chan_downloader::get_page_content(url, &client) {
    Ok(page) => println!("Content: {}", page),
    Err(err) => eprintln!("Error: {}", err),
}

get_thread_infos

返回版块名称和线程ID。

let url = "https://boards.4chan.org/wg/thread/6872254";
let (board_name, thread_id) = chan_downloader::get_thread_infos(url);

assert_eq!(board_name, "wg");
assert_eq!(thread_id, "6872254");

从页面返回链接和链接数量。请注意,链接是成对的。

use reqwest::Client;
let client = Client::new();
let url = "https://boards.4chan.org/wg/thread/6872254";
match chan_downloader::get_page_content(url, &client) {
    Ok(page_string) => {
        let (links_iter, number_of_links) = chan_downloader::get_image_links(page_string.as_str());

        assert_eq!(number_of_links, 4);

        for cap in links_iter.step_by(2) {
            println!("{} and {}", &cap[1], &cap[2]);
        }
    },
    Err(err) => eprintln!("Error: {}", err),
}

依赖项

~11–25MB
~371K SLoC