【问题标题】:Asynchronous URL un-shortening in PythonPython中的异步URL取消缩短
【发布时间】:2020-06-10 16:15:35
【问题描述】:

我目前正在尝试在我的程序中实现一项功能,该功能将检测并取消缩短任何 URL 缩短器,包括 bit.ly 和旧的 goo.gl 链接(现在不再存在)。我找到了几篇文章,我将讨论我目前的实验、发现并提出“有没有办法做到这一点?”的问题

我首先阅读了以前找到的任何文章。我发现了一个 Stack Overflow question 关于如何使用 Python 取消缩短 URL 的内容。答案指向requests 库,使用requests.head,将allow_redirects 设置为True。 requests 根本不适用于 async.io。这是我发现一个基于 Async requests with Python requests 的问题的地方(找到here)

这个问题指向grequests,这是一个异步版本的请求,但是,当我尝试第一个问题中的代码时,将requests替换为grequests,它没有显示重新后的链接位置指示。然后我将.head 更改为.get,虽然它确实有效,但它仍然提供了我使用的bit.ly URL,而不是未缩短的URL。

我不确定在不使其同步而不是异步的情况下,我可以在取消缩短后使用什么来查找 URL 位置。如果有人可以提供帮助,那将非常有用!

【问题讨论】:

  • 你运行的是哪个 Python 版本?
  • 当前运行 3.7 @Tomalak
  • 如果您的目标是“不阻塞主线程”(相对于“必须使用异步完成”),您可以使用使用requests 库进行多线程。
  • 由于我的其他导入,我需要使用 asyncio 来完成。它不能用多线程(或多处理)来完成

标签: python asynchronous python-requests discord.py grequests


【解决方案1】:

试试这个,然后使用 .apply(lambda) 在你的数据框上循环运行它:

import requests

def unshortenurlx(url):
    try:
        response = requests.get(url)
        return(response.url)
    except Exception as e:
        return('Bad url {url}. {e}'.format(url=url, e=e))

【讨论】:

    【解决方案2】:

    我推荐使用的一个好的库是aiohttp,它允许异步 Web 请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 2020-05-12
      • 2011-05-11
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多