当我抓取自动下载内容时会发生什么? (我可以得到结果文件吗?)

问题描述 投票:0回答:1

我正在尝试抓取一个自动下载 mp3 文件的页面

https://dl251.filemate24.shop/?file=M3R4SUNiN3JsOHJ6WWRQNXNPUFN2cFdxRVJIOGhmSXBsY1l1d2hrdFN1QnRxNGc5M3UraGFPWkpLSzRNeEl1dVd1aGQ4VHZYVG9uZE93MlpwZFlyVWlESDhkOHh2QURmOHBvb0JJd2pjQS8zanZLMmxEUXoyeUg0Ym91SVI1NE9LQ1Zka1ZJNzN5eWh5L0wrbHpqSDZpdW1wVjJRSWlrYTRYME1PUHFOeEt3TzBISGJadVhoeDVrSXFIdk90Y29maTZYTDVWYWdoYUE3dnVOMlZrRjNlTTBNbjRuamd2VE8vQT09
但使用 get 请求并将输出放入 .txt 文件中会产生一个 28,000 行长的随机 unicode 字符文件。有什么方法可以获取实际的 mp3 文件吗?是的,我正在尝试下载一首随机的 Rammstein 歌曲作为对更大项目的测试。

我使用检查元素进行了检查,该站点所做的所有操作确实是一个以某种方式生成文件的获取请求。我很确定随机 unicode 与 LAME mp3 加密有关,但我不确定如何。有没有办法从 get 请求中获取 mp3 文件?生成所述文件的 Rust 代码:

#[tokio::main]
async fn get(url: &str,client: &reqwest::Client) -> String {
    let response = client
    .get(url).send()
    .await
    .unwrap()
    .text()
    .await
    .expect("GET failed");

    response

}
fn main() {
    let client = reqwest::Client::new();
    let url = "https://dl251.filemate24.shop/?file=M3R4SUNiN3JsOHJ6WWRQNXNPUFN2cFdxRVJIOGhmSXBsY1l1d2hrdFN1QnRxNGc5M3UraGFPWkpLSzRNeEl1dVd1aGQ4VHZYVG9uZE93MlpwZFlyVWlESDhkOHh2QURmOHBvb0JJd2pjQS8zanZLMmxEUXoyeUg0Ym91SVI1NE9LQ1Zka1ZJNzN5eWh5L0wrbHpqSDZpdW1wVjJRSWlrYTRYME1PUHFOeEt3TzBISGJadVhoeDVrSXFIdk90Y29maTZYTDVWYWdoYUE3dnVOMlZrRjNlTTBNbjRuamd2VE8vQT09";
    println!("{}",url);
    let mp3 = get(url,&client);
    let mut file = std::fs::File::create("a.txt");
    std::fs::write("a.txt",mp3);
}

抱歉,如果这是一个愚蠢的问题;总的来说,我对 Rust 和编码还很陌生。

web-scraping rust mp3
1个回答
0
投票

您看到数据是因为当您在响应中使用 .text() 时,您正在“请求文本数据”。使用

.bytes()
代替,并将
get()
的返回类型更改为
Vec<u8>
顺便说一句,当没有必要时,您会使用异步(tokio)。考虑改用 

reqwest::blocking

© www.soinside.com 2019 - 2024. All rights reserved.