如何爬取 python 進行多執行緒跑資料的內容
下是一個使用 Rust 編寫的爬蟲程式,用於爬取 python 進行多執行緒跑資料的內容。這個爬蟲使用代理資訊進行網路請求,並使用了 Rust 的 async-std 庫進行非同步程式設計。
```rust
use async_std::net::{TcpStream, TcpListener};
use async_std::io::{BufReader, BufWriter};
use async_std::task::{await, spawn};
use async_std::prelude::*;
use std::io::{self, Write};
use std::net::IpAddr;
use std::thread;
use std::sync::Mutex;
const PROXY_HOST: &str = "jshk.com.cn";
struct Worker {
stream: TcpStream,
}
impl Worker {
fn new(stream: TcpStream) -> Self {
Worker { stream }
}
}
impl Future for Worker {
type Item = ();
fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Item> {
match self.stream.read_to_string(&mut self.stream.buffer()) {
Ok(size) => {
let url = format!("{}={}", URL, size);
match self.stream.write_to(&url, &mut self.stream.buffer()) {
Ok(_) => {
println!("Worker finished reading and writing data");
},
Err(err) => {
println!("Worker failed to write data: {}", err);
}
}
},
Err(err) => {
println!("Worker failed to read data: {}", err);
}
}
Poll::Ready(())
}
}
async fn main() {
let mut proxy_stream = TcpStream::connect(format!("{}:{}", PROXY_HOST, PROXY_PORT))?;
let proxy_listener = TcpListener::bind("127.0.0.1:8000")?;
let mut workers = Vec::new();
for _ in 0..10 {
let mut worker = Worker::new(proxy_stream);
let task = spawn(move || worker.run());
workers.push(task);
}
loop {
let (socket, _) = proxy_listener.accept()?;
for worker in workers {
let task = worker.clone();
let mut conn = worker.stream;
if let Ok(conn) = conn {
task.detach().join();
proxy_stream = TcpStream::connect(format!("{}:{}", PROXY_HOST, PROXY_PORT))?;
}
}
}
}
async fn run(self: &mut Worker) {
self.stream.read_to_string(&mut self.stream.buffer())?;
let url = format!("{}={}", URL, self.stream.buffer().string().trim());
self.stream.write_to(&url, &mut self.stream.buffer())?;
}
```
步驟如下:
1. 引入所需的 Rust 庫,包括 async-std、std 和 io。
2. 定義一個 Worker 結構體,它有一個 TcpStream 物件作為成員。
3. 實現 Worker 的 Future 和 poll 方法。poll 方法用於處理網路請求,並將結果寫入 URL 地址。
4. 在 main 函式中,建立一個 TcpListener 物件,並使用它建立多個 Worker 執行緒。
5. 在 main 函式中,迴圈監聽連線請求。每當有新的連線請求時,都會建立一個新的 Worker 執行緒,並將其新增到 workers 列表中。
6. 在 main 函式中,當所有的 Worker 執行緒都執行完畢後,退出迴圈。對於每個 Worker 執行緒,都會嘗試將其連線與代理伺服器斷開,並重新連線到代理伺服器。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70032566/viewspace-2993620/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何使用python多執行緒有效爬取大量資料?Python執行緒
- Python爬蟲入門【9】:圖蟲網多執行緒爬取Python爬蟲執行緒
- Python爬蟲入門【10】:電子書多執行緒爬取Python爬蟲執行緒
- 資料提取方法-多程式多執行緒爬蟲執行緒爬蟲
- python多執行緒中:如何關閉執行緒?Python執行緒
- Python《多執行緒併發爬蟲》Python執行緒爬蟲
- python多執行緒爬蟲與單執行緒爬蟲效率效率對比Python執行緒爬蟲
- 多執行緒爬取B站視訊執行緒
- python進階(9)多執行緒Python執行緒
- python爬蟲入門八:多程式/多執行緒Python爬蟲執行緒
- 最全java多執行緒總結2--如何進行執行緒同步Java執行緒
- python多執行緒爬去糗事百科Python執行緒
- 使用Python進行Web爬取和資料提取PythonWeb
- python使用多執行緒備份資料庫Python執行緒資料庫
- 如何使用python進行網頁爬取?Python網頁
- 【java】【多執行緒】獲取和設定執行緒名字、獲取執行緒物件(3)Java執行緒物件
- Python 多執行緒多程式Python執行緒
- springboot配置執行緒池使用多執行緒插入資料Spring Boot執行緒
- python爬蟲之多執行緒、多程式+程式碼示例Python爬蟲執行緒
- 【python】爬取疫情資料並進行視覺化Python視覺化
- python爬蟲之快速對js內容進行破解Python爬蟲JS
- Python的多程式和多執行緒Python執行緒
- Python中的多工:多執行緒Python執行緒
- 執行緒池中多餘的執行緒是如何回收的?執行緒
- Python爬蟲入門教程 13-100 鬥圖啦表情包多執行緒爬取Python爬蟲執行緒
- Python爬蟲入門教程 11-100 行行網電子書多執行緒爬取Python爬蟲執行緒
- Python建立多執行緒任務並獲取每個執行緒返回值Python執行緒
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- 什麼是Python執行緒?Python執行緒如何建立?Python執行緒
- 多執行緒併發篇——如何停止執行緒執行緒
- 進階Java多執行緒Java執行緒
- 多執行緒和多執行緒同步執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- 【多執行緒與高併發】從一則招聘資訊進入多執行緒的世界執行緒
- Python執行緒專題10:queue、多執行緒按順序執行Python執行緒
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒