Python urllib2.urlopen() 很慢,需要更好的方法来读取多个 url

2024-04-16

正如标题所示,我正在开发一个用 python 编写的网站,它多次调用 urllib2 模块来读取网站。然后我用 BeautifulSoup 解析它们。

由于我必须阅读 5-10 个网站,因此页面需要一段时间才能加载。

我只是想知道是否有办法一次阅读所有网站?或者有什么技巧可以让它更快,比如我应该在每次读取后关闭 urllib2.urlopen ,还是保持打开状态?

Added:另外,如果我只是切换到 php,从其他站点获取和解析 HTML 和 XML 文件会更快吗?我只是希望加载速度更快,而不是目前需要大约 20 秒


我正在使用现代 Python 模块重写下面 Dumb Guy 的代码,例如threading and Queue.

import threading, urllib2
import Queue

urls_to_load = [
'http://stackoverflow.com/',
'http://slashdot.org/',
'http://www.archive.org/',
'http://www.yahoo.co.jp/',
]

def read_url(url, queue):
    data = urllib2.urlopen(url).read()
    print('Fetched %s from %s' % (len(data), url))
    queue.put(data)

def fetch_parallel():
    result = Queue.Queue()
    threads = [threading.Thread(target=read_url, args = (url,result)) for url in urls_to_load]
    for t in threads:
        t.start()
    for t in threads:
        t.join()
    return result

def fetch_sequencial():
    result = Queue.Queue()
    for url in urls_to_load:
        read_url(url,result)
    return result

最佳时间find_sequencial()是2秒。最佳时间fetch_parallel()是0.9秒。

这也是不正确的说法thread由于 GIL,它在 Python 中毫无用处。这是线程在 Python 中有用的情况之一,因为线程在 I/O 上被阻塞。正如你在我的结果中看到的,并行情况快了 2 倍。

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

Python urllib2.urlopen() 很慢,需要更好的方法来读取多个 url 的相关文章

  • 高效地将大型 Pandas 数据帧写入磁盘

    我正在尝试找到使用 Python Pandas 高效地将大型数据帧 250MB 写入磁盘或从磁盘写入的最佳方法 我已经尝试了所有方法Python 数据分析 但表现却非常令人失望 这是一个更大项目的一部分 该项目探索将我们当前的分析 数据管理
  • Python设置1和True的解释

    在 IPython 3 交互式 shell 中 In 53 set2 1 2 True hello In 54 len set2 Out 54 3 In 55 set2 Out 55 hello True 2 是因为 1 和 True 得到
  • 如何检索分配给 Django 中的组的所有权限

    我正在执行一项任务来检索分配给 Django 中的组的一组权限 我可以使用以下代码获取创建的组 但无法使用它来获取分配给它们的权限 from django contrib auth models import Group Permissio
  • 在 Jupyter Notebook 中设置环境变量的不同方法

    在某些情况下 我在 Windows 10 计算机上使用 Jupyter 笔记本 我想通过设置环境变量 GOOGLE APPLICATION CREDENTIALS 来向 GCP 进行身份验证 我想知道 这两种设置环境变量的方式有什么区别 当
  • 如何在seaborn热图标签中使用科学计数法?

    我正在尝试在 python 中使用seaborn 获取热图 不幸的是 即使数字非常大 它也没有使用科学记数法 我想知道是否有任何简单的方法可以转换为科学记数法或任何其他合理的格式 这是显示问题的一段代码 import seaborn as
  • 检查子字符串是否在字符串列表中?

    我之前已经找到了这个问题的一些答案 但它们对于当前的Python版本来说似乎已经过时了 或者至少它们对我不起作用 我想检查字符串列表中是否包含子字符串 我只需要布尔结果 我找到了这个解决方案 word to check or wordlis
  • 将多索引转换为行式多维 NumPy 数组。

    假设我有一个类似于以下示例的 MultiIndex DataFrame多索引文档 http pandas pydata org pandas docs stable advanced html gt gt gt df 0 1 2 3 fir
  • 获取 int() 参数必须是字符串或数字,而不是“Column”- Apache Spark

    如果我使用以下代码 我会收到此异常 int argument must be a string or a number not Column df df withColumn FY F when df ID substr 5 2 isin
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 同一台机器上有多个Python版本?

    Python 网站上是否有关于如何在 Linux 上的同一台计算机上安装和运行多个版本的 Python 的官方文档 我可以找到无数的博客文章和答案 但我想知道是否有 标准 官方方法可以做到这一点 或者这一切都取决于操作系统 我认为它是完全独
  • 在 pygame 中,我如何创建一个数据结构来跟踪调整大小事件和对象的坐标?

    我希望在调整屏幕大小后使鼠标事件与对象保持同步 有人告诉我需要创建一个数据结构来跟踪 调整事件大小 新坐标以匹配调整大小 如何使用简单的代数方程来完成此操作并将其集成到调整大小事件中以进行准确更新 反过来做 创建一个虚拟游戏地图 在绘制场景
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 更改用作函数全局作用域的字典

    我想做一个 purePython 的装饰器 其中一部分是能够有选择地禁止访问函数的全局范围 有没有一种方法可以以编程方式更改哪个字典事物充当函数的全局 外部作用域 因此 例如在下面我希望能够拦截对f in h并抛出错误 但我想允许访问g因为
  • 在 for 循环中访问 itertools 产品的元素

    我有一个列表列表 是附加 itertools 产品的一些其他结果的结果 我想要的是能够使用 for 循环访问列表列表中列表的每个元素 但我无法访问所有元素 我只能访问最后一个列表的元素 结果是一个非常巨大的列表列表 例如 1 2 4 3 6
  • 如何使用logging.conf文件使用RotatingFileHandler将所有内容记录到文件中?

    我正在尝试使用RotatingHandler用于 Python 中的日志记录目的 我将备份文件保留为 500 个 这意味着我猜它将创建最多 500 个文件 并且我设置的大小是 2000 字节 不确定建议的大小限制是多少 如果我运行下面的代码
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt
  • 为什么我的 PyGame 应用程序根本不运行?

    我有一个简单的 Pygame 程序 usr bin env python import pygame from pygame locals import pygame init win pygame display set mode 400
  • 在 python 中使用高精度时间戳

    嘿 我正在使用 python 处理日期时间 我想知道解析这个时间戳的最佳方法是什么 时间戳是ISO标准 这里是一个例子 2010 06 19T08 17 14 078685237Z 现在到目前为止我已经使用过 time datetime d
  • 匿名结构和空结构

    http play golang org p vhaKi5uVmm http play golang org p vhaKi5uVmm package main import fmt var battle make chan string

随机推荐

  • Java中获取Spark当前任务ID

    我需要获取 Spark 中当前任务的 ID 我一直在Google和官方API中搜索 但我能找到的唯一ID是执行者ID和RDD的ID 有谁知道如何获取任务的唯一ID 我看到班级TaskInfo正是我正在寻找的东西 但我不知道如何获取此类的实例
  • 正则表达式从查询字符串中删除一个参数

    我正在寻找一个正则表达式来从查询字符串中删除单个参数 并且如果可能的话 我想在单个正则表达式中执行此操作 假设我要删除foo范围 现在我用这个 foo 只要foo不是查询字符串中的第一个参数 如果是 那么我的新查询字符串以 符号开头 例如
  • 姜戈。线程安全的更新或创建。

    我们知道 更新是线程安全的操作 这意味着 当你这样做时 SomeModel objects filter id 1 update some field 100 代替 sm SomeModel objects get id 1 sm some
  • Spring-如何保护RESTful私有资源?

    我有一些 RESTful 服务 使用 Spring MVC 实现 公开一组资源 我已经使用基于 HTTPBasicAuthentication 和 HTTPS 的身份验证 某些资源必须只能由某些用户访问 例如 我希望 URI 中的所有子资源
  • jQuery,单击时连续调用多个动画

    到目前为止 我已经做到了 所以当页面打开时 一些动画会运行以使一些图片和文本滑入视图中 我在页面顶部有链接 这些链接没有目的地 但我已将它们全部链接用于样式目的 例如效果悬停 访问等 链接有类 所有链接都有 nav 类 然后它们每个都有相关
  • WPF:列表视图在顶部而不是底部显示最近添加的项目

    我有一个集合绑定到列表视图 该集合每 4 5 秒添加一次项目 新项目将自动添加到列表视图的底部 因此 如果您想看到最新的项目 那么您需要向下滚动到底部 我的问题是 是否可以反转列表视图 以便新的最新项目位于顶部 最旧的项目位于底部 Than
  • 视频馈送至 ThingsBoard 仪表板

    我目前使用 ThingsBoard 作为 IoT 代理来捕获来自多个传感器的遥测数据并将其显示到仪表板 我想添加显示来自 iPhone 相机或网络摄像头的实时视频源的功能 我想知道这里是否有人知道 ThingsBoard 是否支持任何类型的
  • 检测PHP中是否启用cookie

    我正在尝试检测我的页面上的用户是否启用了 cookie 以下代码执行检查 但是 我不知道如何将用户重定向到他们来自的页面 该脚本启动一个会话并检查是否已检查 cookie 如果没有 它会将用户重定向到测试页面 并且由于我在第一页中调用了 s
  • R rpart:如果删除不太重要的变量,则不会分割

    我试图了解 rpart 在我试图完成的项目中如何工作 我对 R 比较陌生 但我有很多使用 SAS 构建各种分析模型的经验 首先我运行了这段代码 mtree1 lt rpart X17 data mydata method class con
  • FileInfo.Extension 是否返回最后一个 *.* 模式或其他内容?

    我很好奇以下行为到底是什么 FileInfo info new FileInfo C testfile txt gz string ext info Extension 这会返回 txt gz 还是 gz 更多扩展名 例如 txt gz z
  • 点击 CardView 时的仰角动画

    我想将海拔动画添加到我的android support v7 widget CardView 就像材质风格一样Button是的 我尝试过设置一个StateListAnimator android stateListAnimator anim
  • 如何在 FactoryGirlRails 中定义序列?

    以前在 Factory Girl 中 我们可以像这样定义序列 spec factories rb FactoryGirl define do this is the sequence in question sequence random
  • vscode api:如何从文件图标主题获取图标

    我正在为 VSCode 编写一个扩展 在 WebviewPanel 中 我需要显示来自文件图标主题的文件扩展名图标 有没有从文件图标主题中获取图标的功能 我也在研究这个 我还没有答案 但到目前为止已经有了一些线索 希望这可以帮助 https
  • Perl 调用带括号和不带括号的方法

    一些 Perl 书籍建议在调用类方法时使用括号 称这有助于使解析器不必猜测代码的意图 然而 我见过的几乎所有 Perl 代码 包括 cpan 上的模块 在调用不带参数的方法时很少使用括号 省略这些括号是正常的还是我应该总是输入它们 我编写了
  • Keras:使用 flow_from _directory() 函数为两个输入模型创建自定义生成器

    我试图用以下方法训练我的暹罗网络fit generator 我从这个答案中了解到 Keras 如何将 fit generator 与多个输入一起使用 https stackoverflow com questions 49404993 ke
  • 通过实施 Web 服务向 Alexa 托管自定义技能

    我正在开发一个网络服务 用于处理 Alexa 发送的请求并在 net 框架中以特定响应进行响应 Alexa 以 JSON 格式发送到您的服务的请求正文 如下所示 version string session new true session
  • 使用AppService的连接持续时间有限制吗?

    我有一个 UWP 应用程序托管应用服务 https learn microsoft com en us windows uwp launch resume how to create and consume an app service在同
  • Pyspark 错误:Java 网关进程在发送其端口号之前退出

    我正在使用 Pyspark 在 Jupyter Notebook 中运行一些命令 但它抛出错误 我尝试了此链接中提供的解决方案 Pyspark 异常 Java 网关进程在向驱动程序发送其端口号之前退出 https stackoverflow
  • /usr/bin/ld: 找不到 -llibeststring.a

    我在我的程序中使用 Festival TTS C API 我已经从以下位置下载了所有文件http www cstr ed ac uk downloads festival 2 0 95 http www cstr ed ac uk down
  • Python urllib2.urlopen() 很慢,需要更好的方法来读取多个 url

    正如标题所示 我正在开发一个用 python 编写的网站 它多次调用 urllib2 模块来读取网站 然后我用 BeautifulSoup 解析它们 由于我必须阅读 5 10 个网站 因此页面需要一段时间才能加载 我只是想知道是否有办法一次