问题标签 [grequests]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
725 浏览

python-3.x - Beautifulsoup 解析千页

我有一个脚本来解析一个包含数千个 url 的列表。但我的问题是,这份清单需要很长时间才能完成。

URL 请求大约需要 4 秒才能加载页面并进行解析。有什么方法可以快速解析大量的 URL?

我的代码如下所示:

编辑:在这个例子中如何处理带有钩子的异步请求?我尝试了本网站Asynchronous Requests with Python requests上提到的以下内容:

这对我不起作用。我什至没有在控制台中收到任何错误,它只是运行了很长时间直到它停止。

0 投票
2 回答
6523 浏览

python - 了解请求与请求

我正在使用一个基本上如下的过程:

  1. 获取一些网址列表。
  2. 从每个中获取一个Response对象。
  3. text从每个响应中创建一个 BeautifulSoup 对象。
  4. 从 BeautifulSoup 对象中提取某个标签的文本。

据我了解,这似乎是grequests的理想选择:

GRequests 允许您使用带有 Gevent 的请求来轻松地发出异步 HTTP 请求。

但是,这两个进程(一个带有请求,一个带有 grequests)似乎给我带来了不同的结果,grequests 中的一些请求返回None而不是响应。

使用请求

使用请求

为什么结果不同?

更新:我可以按如下方式打印异常类型。相关讨论here,但我不知道发生了什么。

系统/版本信息

  • 请求:2.18.4
  • 请求:0.3.0
  • 蟒蛇:3.6.3
  • urllib3:1.22
  • pyopenssl:17.2.0
  • 全部通过 Anaconda
  • 系统:Mac OSX HS 和 Windows 10 上的相同问题,构建 10.0.16299
0 投票
0 回答
453 浏览

python - Python:在执行 HTTP 请求时不阻止 GTK UI 的正确方法

问题:从远程 HTTP 源加载数据时不阻止 GTK UI 的正确方法是什么?

背景:

我正在为 Ubuntu Unity 开发加密货币价格指标。我已经修改了原始项目,以便它可以同时运行多个代码。

从原理上讲,它的工作原理如下:

主线程找到要加载的每个代码,并为每个代码启动一个 GTK libAppindicator 实例(Indicator)。然后每个指标加载一个类,该类从远程 API 检索代码数据并将其反馈给指标。

但是,我注意到 UI 在不规则的时间间隔变得无响应。我认为这是因为 HTTP 请求(带有请求库)被阻塞。所以我决定在自己的线程中启动每个指标,但是一旦代码全部加载,同样的问题仍然会发生。(我不明白为什么,如果某些东西在它自己的线程上,它不应该阻塞主线程?)

然后我尝试用 grequests 替换请求,但是我无法让它工作,因为回调似乎永远不会被调用。似乎也有类似 Promise 的东西,但所有这些的文档看起来已经过时且不完整。

代码:

0 投票
1 回答
324 浏览

session - 是否可以设置在同一会话中的所有池连接之间共享的最大重试次数?

grequest目前,我执行以下操作来为我的包装器设置最大连接重试次数:

grequest然后,我以会话self._s作为参数之一创建了一堆对象。例如,创建一组GET请求将使用以下方式完成:

requests = [grequests.get(url, ..., 'session': self._s')]

最后,这些最终都使用grequests.map(requests, ...).

问题是我想要一种使最大重试次数持续存在并在连接池的所有连接之间共享的方法。重试似乎仍然仅适用于单个连接。有什么可能的方法吗?这是不可能的,因为新Retry()对象似乎是在每次减少总调用时创建的?

0 投票
0 回答
107 浏览

python - 在异步代码中处理 url 重定向

最近我决定将一个项目从使用移植requests到使用grequests来进行异步 HTTP 请求,以提高效率。我现在面临的一个问题是,在我之前的代码中,如果有重定向,我可以使用以下代码段来处理它:

通过这种方式,我可以在重定向后检索上次访问的 url。所以我的问题是是否有可能实现与grequests. 阅读文档我没有设法找到可能的解决方案。提前致谢!

0 投票
1 回答
1119 浏览

python - grequests - 打开的文件太多错误

我正在尝试执行大约 100k GET 请求并解析每个请求的响应正文。我认为 grequests 是一个不错的方法,但我遇到了与“打开的文件太多”相关的错误。这是代码:

有人有这方面的经验吗?我得到的错误是:

requests.packages.urllib3.connection.HTTPConnection object at 0x7f817ab36898>: 无法建立新连接 [Errno 24] 打开的文件太多

0 投票
1 回答
544 浏览

python - 从 API 获取 .csv 文件的请求

我需要从 SharePoint 获取多个 .csv 文件。

如果我通过邮递员提出这个请求

带标题

我得到“test_sharepoint.csv”的内容:

我需要一次下载多个文件,而 SharePoint 似乎没有为其提供端点。所以使用 python 和grequests,我得到一个响应,但不是二进制数据:

我怎样才能真正通过 获取二进制数据grequests

0 投票
0 回答
409 浏览

python - 是否可以使用多台计算机加速网络爬虫?

有没有办法通过让多台计算机参与处理 url 列表来加速网络爬虫?就像计算机 A 使用 url 1 - 500 和计算机 B 使用 url 501 - 1000 等一样。我正在寻找一种方法来构建尽可能快的网络爬虫,并利用普通人可用的资源。

我已经在使用 grequests 模块中的多处理。这是 gevent + request 组合。

这种抓取不需要不断地运行,而是在每天早上的特定时间(早上 6 点)运行,并且在它开始时就完成。我正在寻找快速准时的东西。

此外,我正在查看零售商店的网址(即:target、bestbuy、newegg 等),并使用它来检查当天有哪些商品。

这是用于在我试图放在一起的脚本中获取这些 url 的代码段:

这不是我的代码,它来自这两个链接:

使用 grequests 向 sourceforge 发出数千个 get 请求,得到“Max retries exceeded with url”

了解请求与请求

0 投票
2 回答
22244 浏览

python - 在 Python 3.7 中使用 Requests 库发出异步请求

我需要使用 Requests 库发出异步请求。在 Python 3.7 中,如果我尝试from requests import async我得到SyntaxError: invalid syntax.

async在 Python 3.7 中已成为保留的 with。我该如何解决这种情况?

0 投票
1 回答
419 浏览

python-3.x - 如何将批量 URL 发送到 grequest?

我有一个大约 300K API URL 的列表,我想调用这些 URL 并从中获取数据:

lst = ['url.com','url2.com']

如果我将我的列表细分为 5 个 urlgrequest可以完美地处理请求。但是,当我传入完整的 ~300K URL 时,出现错误:

到目前为止进行异步调用的代码:

当我通过时,我不确定自己做错了什么stream=False

无论如何我可以分批传递我的清单吗?