python爬虫增加多线程获取数据

2023-11-13

Python爬虫应用领域广泛,并且在数据爬取领域处于霸主位置,并且拥有很多性能好的框架,像Scrapy、Request、BeautifuSoap、urlib等框架可以实现爬行自如的功能,只要有能爬取的数据,Python爬虫均可实现。数据信息采集离不开Python爬虫,而python爬虫离不开代理ip,他们的结合可以做的事情很多,如广告营销、各种数据采集大数据分析,人工智能等,特别是在数据的抓取方面可以产生的作用巨大。

img

专业提供优质爬虫代理

既然爬虫代理ip是python网络爬虫不可缺少的部分,那高质量的,ip资源丰富遍布全国的,高匿极速稳定http代理,非常适合python网络爬虫运用场景。比如在有优质代理IP的前提下使用python实现百度网页采集,增加多线程处理,同时对百度返回的内容进行分类统计,实现代码如下:

import asyncio
import aiohttp
import threading
from collections import Counter

# 定义一个全局变量,用于存储分类结果
categories = Counter()

# 定义一个函数,用于根据文本内容进行分类
def classify(text):
    # 这里可以使用任何文本分类的方法,例如正则表达式、机器学习等
    # 这里为了简单起见,只使用了简单的字符串匹配
    if "Python" in text:
        return "Python"
    elif "Java" in text:
        return "Java"
    elif "C++" in text:
        return "C++"
    else:
        return "Other"

async def fetch_page(url, proxy):
    # 创建一个 aiohttp 的 ClientSession 对象,并指定代理IP和端口
    async with aiohttp.ClientSession(proxy=proxy) as session:
        # 使用 session.get 方法发送请求,并获取响应对象
        async with session.get(url) as response:
            # 返回响应的文本内容
            return await response.text()

async def main():
    urls = ["https://www.baidu.com/s?wd=" + str(i) for i in range(10)] # 生成十个百度搜索网址
    
    # 假设有一个文件 16yun.txt,每行存储一个代理host和端口,例如 www.16yun.cn:3333
    # 读取文件中的所有代理,并存储在一个列表中
    with open("16yun.txt") as f:
        proxies = [line.strip() for line in f]
    
    tasks = [] # 创建一个空列表,用于存储 task 对象
    
    # 遍历 urls 和 proxies 列表,为每个 url 配对一个 proxy,并创建 task 对象
    for url, proxy in zip(urls, proxies):
        task = asyncio.create_task(fetch_page(url, proxy))
        tasks.append(task)
    
    results = await asyncio.gather(*tasks) # 同时运行所有 task 并获取结果
    
    # 创建一个线程池,用于执行分类任务
    pool = threading.ThreadPoolExecutor(max_workers=4)
    
    for result in results:
        print(result[:100]) # 打印每个网页的前 100 个字符
        
        # 使用线程池提交一个分类任务,并更新全局变量 categories
        category = pool.submit(classify, result).result()
        categories[category] += 1
    
    # 关闭线程池并等待所有任务完成
    pool.shutdown(wait=True)
    
    # 打印最终的分类结果
    print(categories)

asyncio.run(main()) # 运行主协程

通过上面的代码实现数据抓取后,我们也可以简单的根据数据来分析下代理ip池要求。 通过获取的数据量,能够大概了解需要访问多少网页,通过目标网站的反爬策略,能大概知道需要多少代理ip,需要多大的代理ip池。假设要访问50万个页面,每个ip能访40个页面后会触发反爬机制,那大概需要1万左右不重复的代理ip。这只是简单的一个计算,网站不同,反爬机制不同,对IP的需求是要以实际测试的数据为准的。在我们使用代理ip时,如何使爬虫更有效的进行,在爬虫采集数据信息需要注意哪些地方,我们一起来分析如何更有效的采集到数据信息,提高工作效率,下一次分享给大家参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫增加多线程获取数据 的相关文章

  • 熊猫按 n 最大总和分组

    我正在尝试使用groupby nlargest and sum在 Pandas 中一起运行 但在运行时遇到困难 State County Population Alabama a 100 Alabama b 50 Alabama c 40
  • 为什么 Mypy 在 __init__ 中分配已在类主体中进行类型提示的属性时不给出键入错误?

    这是我的示例 python 文件 class Person name str age int def init self name age self name name self age age p Person 5 5 但当我跑步时myp
  • 如何让“conda”安装程序查找“PyPi”包

    我试图使用conda http conda pydata org docs using pkgs html managing packages包管理器来安装我的 Python 包 最近 我遇到了 Anaconda org 存储库中不存在我需
  • DynamodB:如何更新排序键?

    该表有两个键 filename 分区键 和eventTime 排序键 我要更新eventTime对于某些filename Tried put item and update item 发送相同的filename与新的eventTime但这些
  • 如何通过 python 中的函数运行列表?

    我试图通过我创建的函数运行我的列表 但不断收到错误 我不知道出了什么问题 温度 F temp f 19 21 21 21 23 功能 def fahrToCelsius tempFahrenheit return tempFahrenhei
  • Python,Google Places API - 给定一组纬度/经度查找附近的地点

    我有一个由商店 ID 及其纬度 经度组成的数据框 我想迭代该数据框 并使用 google api 为每个商店 ID 查找附近的关键地点 例如输入 Store ID LAT LON 1 1 222 2 222 2 2 334 4 555 3
  • Python3将模块从文件夹导入到另一个文件夹

    我的结构字典是 mainFolder folder1 init py file1 py file2 py folder2 init py file3 py file4 py setup py init py 我需要将 file4 py 从f
  • Python Selenium 打印另存为 PDF 等待文件名输入

    我正在尝试通过打印对话框将网站另存为 PDF 我的代码允许我另存为pdf 但要求我输入文件名 我不知道如何将文件名传递到弹出框 附上我的代码 import time from selenium import webdriver import
  • 会话数据库表清理

    该表是否需要清除或者由 Django 自动处理 Django 不提供自动清除功能 然而 有一个方便的命令可以帮助您手动完成此操作 Django 文档 清除会话存储 https docs djangoproject com en dev to
  • 获取 Keras model.summary() 作为表

    我在 Keras 中创建了相当大的模型 我正在用 LaTeX 写一篇关于它的文章 为了很好地描述 LaTeX 中的 keras 模型 我想用它创建一个 LaTeX 表 我可以手动实现它 但我想知道是否有任何 更好 的方法来实现这一点 我四处
  • 如何知道python运行脚本的路径?

    sys arg 0 给我 python 脚本 例如 python hello py 返回 sys arg 0 的 hello py 但我需要知道 hello py 位于完整路径中的位置 我怎样才能用Python做到这一点 os path a
  • 如何从 python 脚本执行 7zip 命令

    我试图了解如何使用 os system 模块来执行 7zip 命令 现在我不想用 Popen 或 subprocess 让事情变得复杂 我已经安装了 7zip 并将 7zip exe 复制到我的用户文件夹中 我只想提取我的测试文件 inst
  • multiprocessing.Queue 中的 ctx 参数

    我正在尝试使用 multiprocessing Queue 模块中的队列 实施 https docs python org 3 4 library multiprocessing html exchang objects Between p
  • 使用会话在 Django 中将文件从一个视图传递到另一个视图

    我当前的工作项目要求我允许用户上传各种格式的文件 目前仅处理 CSV 格式 然后使用包含的数据来绘制图表Pandas http pandas pydata org 图书馆 我决定将图形渲染到模板的最简单方法是为图形创建特定视图 然后将图像从
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 使用 ElementTree 在 python 中解析 xml

    我对 python 很陌生 我需要解析一些脏的 xml 文件 这些文件需要先清理 我有以下 python 代码 import arff import xml etree ElementTree import re totstring wit
  • Eclipse/PyDev 中未使用导入警告,尽管已使用

    我正在我的文件中导入一个绘图包 如下所示 import matplotlib pyplot as plt 稍后我会在我的代码中成功使用此导入 fig plt figure figsize 16 10 然而 Eclipse 告诉我 未使用的导
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 类返回语句不打印任何输出

    我正在学习课程 但遇到了问题return语句 它是语句吗 我希望如此 程序什么也没有打印出来 它只是结束而不做任何事情 class className def createName self name self name name def
  • tf.print() vs Python print vs tensor.eval()

    看来在Tensorflow中 至少有三种方法可以打印出张量的值 我一直在读here https www freecodecamp org news debugging tensorflow a starter e6668ce72617 an

随机推荐

  • SpringCloud-服务配置

    服务配置 Spring Cloud Config分布式配置中心 概述 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务 每个服务的粒度相对较小 因此系统中会出现大量的服务 由于每个服务都需要必要的配置信息才能运行
  • NAT--静态、动态、NAPT、Easy-ip、NAT server

    静态NAT 静态 NAT Static NAT 一对一 将内部网络的私有IP地址转换为公有IP地址 IP地址对是一对一的 是一直不变的 实验拓扑 PC配置 AR1
  • 5 .A-B 数对-二分查找/模拟(普及-)

    文章目录 问题描述 问题分析 代码实现 运行结果 总结 问题描述 出题是一件痛苦的事情 相同的题目看多了也会有审美疲劳 于是我舍弃了大家所熟悉的 A B Problem 改用 A B 了哈哈 好吧 题目是这样的 给出一串数以及一个数字 C
  • 深度测评

    2021 跨平台开发框架到底哪家强 目前市场上有多个专业做跨平台开发的框架 那么对开发者来说究竟哪一个框架更符合自己的需求呢 笔者特地总结对比了一下不同框架的特性 国内外笔者选择了一共 5 个主流的测评对象 分别是 RN Flutter I
  • Kafka 数据存储形式以及数据清理

    文章目录 Kafka 的存储日志 日志的观察模式 日志写入模式 日志读写模式 删除消息 数据挤压问题 数据清理 日志删除 日志压缩 在Kafka当中数据是以日志的形式存在的 Kafka 的存储日志 在Kafka当中 数据在磁盘当中的存储 K
  • 家用千兆路由器排行榜前十名_路由器哪个牌子好?千兆路由器2019排行

    现在网络宽带已经进入千兆时代 几乎很多的宽带已经免费升级到了100M以上 所以之前的百兆无线路由器已经有点落伍了 市面上也出现了很多的入门级的千兆无线路由器 区别就是如果你家的宽带在100M以内 比如80M 50M 20M 10M等 使用百
  • 取消GL.iNet路由器视频的密码

    每次路由器访问192 168 8 1 8083 action stream时总是无法访问 但是先进入192 168 8 1登录以后再去刷新视频就可以出来 即使取消外网登录验证也还是没效果 最后发现广大网友的意见是重新刷固件 先去GL iNe
  • 计算机专业毕业设计演示视频(论文+系统)_kaic

    https gongkailuxiangdu oss cn beijing aliyuncs com lx jsp 20 70912jspm E6 88 BF E5 B1 8B E9 94 80 E5 94 AE E7 AE A1 E7 9
  • 树莓派命令行显示乱码及异地组网问题

    写了一千多字没保存 很生气 这一条简写 命令行显示异常 首先检查树莓派设置里的地区 时区设置 一律改为中国 随后重要原因就是字库不全问题 命令行输入 sudo apt get install ttf way zenhei 一路确定安装字体
  • 程序的链接的三种方式

    程序的链接有以下三种方式 静态链接 在程序运行之前 先将各目标模块及它们所需的库函数链接成一个完整的可执行程序 以后不再拆开 装入时动态链接 将用户源程序编译后所得到的一组目标模块 在装入内存时 釆用边装入边链接的链接方式 运行时动态链接
  • 使用matlab进行灵敏性分析(附源代码)

    调用单纯形程序 function x z flg sgma simplexfun A A1 b c m n n1 cb xx A b are the matric in Ax b c is the matrix in max z cx A1
  • ChatGPT实现代码生成

    代码生成 就代码生成而言 ChatGPT 是一款卓越的工具 它为开发者提供强大的功能 ChatGPT 可以运用其出色的自然语言处理技术 深入理解和解释开发者的需求 快速生成适合的代码片段 对于那些繁琐的任务或者重复的代码 ChatGPT 能
  • 试题 C: 刷题统计

    题目链接 点击跳转 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛 他计划周一至周五每天做 a 道题目 周六和周日每天做 b 道题目 请你帮小明计算 按照计划他将在第几天实现做题数大于等于 n 题 输入格式 输入一行包含三个整数 a
  • 系统资源占用高排查手段

    1 cpu高排查思路 1 top d 1每秒打印进程所占cpu资源 然后再按h显示线程占用 2 strace跟踪strace p 线程号 会打印该线程主要做什么操作 2 io高排查思路 lsof是一个展现的是当前系统所有进程 不是线程 打开
  • 端午过后公司面了一个字节来的要求月薪23K,明显感觉他背了很多面试题...

    最近有朋友去字节面试 面试前后进行了20天左右 包含4轮电话面试 1轮笔试 1轮主管视频面试 1轮hr视频面试 据他所说 80 的人都会栽在第一轮面试 要不是他面试前做足准备 估计都坚持不完后面几轮面试 其实 第一轮的电话面试除了一些常规的
  • Redis数据结构——QuickList、SkipList、RedisObjective

    承接上文 本文主要介绍QuickList SkipList RedisObjective 四 Redis数据结构 QuickList 问题1 ZipList虽然节省内存 但申请内存必须是连续空间 如果内存占用较多 申请内存效率很低 怎么办
  • ObjectArx 学习笔记(一)--入口函数acrxEntryPoint

    参考资料 AutoCAD 2000 ARX二次开发实例精粹 1 Arx程序的初始化 新建完工程之后 Arx程序的初始化在acrxEntryPoint 函数的AcRx kInitAppMsg事件中 或该事件调用的函数中进行 例如InitApp
  • 【PS】高低频磨皮

    一 原理 将皮肤纹理的信息储存在高频的图层中 将皮肤颜色的信息储存在低频的图层中 从而分开皮肤的颜色和纹理 达到快速修复皮肤的效果 二 步骤 1 建立高低频图层 2 低频图层 3 高频图层 图像 应用图像 混合模式改为线性光
  • 以http协议实现onvif协议并完成对IPC摄像头的监控

    文章目录 目录 文章目录 前言 1实现http连接 2 获取设备编码参数 3 设置摄像头相关参数 总结 前言 因为工作上的原因 需要接入IPC摄像头 实现监控功能 因而开始了对于IPC摄像头的学习之路 因为要做到通用 所以目光直接锁定了on
  • python爬虫增加多线程获取数据

    Python爬虫应用领域广泛 并且在数据爬取领域处于霸主位置 并且拥有很多性能好的框架 像Scrapy Request BeautifuSoap urlib等框架可以实现爬行自如的功能 只要有能爬取的数据 Python爬虫均可实现 数据信息