如何爬取 python 进行多线程跑数据的内容

news2024/11/29 1:54:21

下是一个使用 Rust 编写的爬虫程序,用于爬取 python 进行多线程跑数据的内容。这个爬虫使用代理信息进行网络请求,并使用了 Rust 的 async-std 库进行异步编程。

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!("http://localhost:8000/data?{}={}", 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!("http://localhost:8000/data?{}={}", 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 线程,都会尝试将其连接与代理服务器断开,并重新连接到代理服务器。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1187780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webGL项目的开发流程

WebGL (Web Graphics Library) 是一种用于在网页上渲染 2D 和 3D 图形的 JavaScript API。下面是创建 Web 应用程序中使用 WebGL 的流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 了解 WebGL&am…

什么是Node.js的NVM(Node Version Manager)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

用Leangoo领歌免费敏捷工具做敏捷需求管理

传统的瀑布工作模式使用详细的需求说明书来表达需求&#xff0c;需求人员负责做需求调研&#xff0c;根据调研情况编制详细的需求说明书&#xff0c;进行需求评审&#xff0c;评审之后签字确认交给研发团队设计开发。在这样的环境下&#xff0c;需求文档是信息传递的主体&#…

巅峰对决:英伟达 V100、A100/800、H100/800 GPU 对比

近期&#xff0c;不论是国外的 ChatGPT&#xff0c;还是国内诸多的大模型&#xff0c;让 AIGC 的市场一片爆火。而在 AIGC 的种种智能表现背后&#xff0c;均来自于堪称天文数字的算力支持。以 ChatGPT 为例&#xff0c;据微软高管透露&#xff0c;为 ChatGPT 提供算力支持的 A…

想水目标检测sci论文的同学看过来:第一个用于目标检测的扩散模型

目标检测新范式&#xff01;在 COCO、CrowdHuman 和 LVIS上取得了良好的性能&#xff0c;尤其是跨不同场景的零样本迁移 本文提出了 DiffusionDet&#xff0c;这是一个新框架&#xff0c;它将目标检测制定为从噪声框到对象框的去噪扩散过程。 在训练阶段&#xff0c;目标框从真…

Verilog 之 wire与reg 类型的变量

文章目录 reg 类型wire 类型总结默认情况下的input ,output 变量 在 Verilog 中&#xff0c;reg 和 wire 是用来声明变量或信号的关键字&#xff0c;它们有不同的特征和用途。 reg 类型 reg 类型用于表示寄存器变量。在 Verilog 中&#xff0c;reg 用于存储状态或时序逻辑&am…

数据库索引详解

目录 第一章、快速了解索引1.1&#xff09;索引是什么1.2&#xff09;为什么使用索引1.3&#xff09;快速上手创建简单索引 第二章、索引分类2.1&#xff09;按数据结构分类2.1.1&#xff09;树型数据结构的索引①二叉树②B树③B 树&#xff1a;B 树的升级版 2.1.2&#xff09;…

Node.js中的回调地狱

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Go - 用户服务和Web服务

文章目录 go日志库之zap1. 安装和基本使用2. 写入日志文件 go的配置文件管理-viper1. 介绍2. yaml教程3. 安装4. 将配置文件映射成struct5. 使用 自定义验证器1. 手机号码正则表达式2. 自定义翻译的问题 JWT1. json web token是什么&#xff1f;2. 什么时候你应该用JSON Web To…

5 个 Python 代码来自动化你的日常工作,网友:早知道就好了

1、从Word里提取所有图片 1行代码&#xff0c;提取Word中的图片。 需要强调的是&#xff1a;这个功能需求不仅来自课程群&#xff0c;就连代码都是课程群里王鹏大哥开发的&#xff0c;我们这套课程针对小白入门Python&#xff0c;看来是有效果的。 安装第三方库 pip instal…

倒计时1天|GitHub Universe 2023 明天见!

点击蓝字 关注我们 北京时间 11月9 - 10日&#xff0c;全球开发者盛会——GitHub Universe 正式回归&#xff01; 本次 GitHub Universe 汇集了世界各地的开发者、企业领导者和安全专业人士&#xff0c;就人工智能、安全和开发者体验进行为期两天的互动会议&#xff0c;学习如何…

铁路数据调度采集RTU远程终端钡铼技术S270使用

钡铼技术有限公司的S270 RTU远程终端在铁路数据调度采集系统中扮演着关键角色。该系统通过使用先进的通信技术和数据处理能力&#xff0c;实现对铁路运营数据的实时采集、传输、监控和分析。这有助于提高铁路运输的效率和安全性&#xff0c;优化调度指挥&#xff0c;并为决策提…

zookeeper:服务器有几种状态?

四种&#xff1a; looking(选举中&#xff09;、leading(leader)、following( follower)、 observer(观察者角色&#xff09;

[C++随笔录] AVL树

AVL树 引言AVL树的模拟实现AVL树的底层结构insert的实现实现思路旋转逻辑insert的完整代码 insert的验证 源码 引言 前面 二叉搜索树的时间复杂度那里提过一嘴 AVL树 和 红黑树. 因为二叉搜索树的时间复杂度是 O(高度次), 最坏情况下 -- 退化到单支链, 是 O(N); AVL 和 红黑树…

工业摄像机参数计算

在工业相机选型的时候有点懵&#xff0c;有一些参数都不知道咋计算的。有些概念也没有区分清楚。‘’ 靶面尺寸 CMOS 或者是 CCD 使用几分之几英寸来标注的时候&#xff0c;这个几分之几英寸计算的是什么尺寸&#xff1f; 一开始我以为这个计算的就是靶面的实际对角线的尺寸…

基于i.MX6ULL的掉电检测设计与软件测试

基于i.MX6ULL平台设计实现掉电检测功能&#xff0c;首先选择一路IO&#xff0c;利用IO电平变化触发中断&#xff0c;在编写驱动时捕获该路GPIO的中断&#xff0c;然后在中断响应函数中发送信号通知应用程序掉电发生了。 图 1.1 掉电信号IO 驱动代码: #include <linux/modul…

AIGC视频生成/编辑技术调研报告

人物AIGC&#xff1a;FaceChain人物写真生成工业级开源项目&#xff0c;欢迎上github体验。 简介&#xff1a; 随着图像生成领域的研究飞速发展&#xff0c;基于diffusion的生成式模型取得效果上的大突破。在图像生成/编辑产品大爆发的今天&#xff0c;视频生成/编辑技术也引起…

【多语言多商户跨境商城系统.源码开源无加密】—— 打破语言障碍,实现全球商业连接

随着全球电子商务的飞速发展&#xff0c;多语言多商户跨境商城系统已成为行业内的热门需求。这类系统能够有效地解决跨国交易中的语言沟通难题&#xff0c;同时为多商户提供公平的交易平台&#xff0c;实现全球商业连接。 今天&#xff0c;我们为您推荐一款多语言多商户跨境商城…

3、FFmpeg基础

1、FFmpeg 介绍 FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库。 2、FFmpeg 组成 - libavformat&#xff1a;用于…

java项目之电子资源管理系统(ssm+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的电子资源管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; &#xff08;1&#xff09;在个…