【问题标题】:Detecting a short url using Python使用 Python 检测短 url
【发布时间】:2017-08-30 08:27:09
【问题描述】:

很抱歉,如果之前已解决此问题,但我找不到任何先前的解决方案。我正在使用 Pandas 从 URL 中提取域并计算结果。有没有办法根据 URL 是否是短链接(例如 bit.ly 和 goo.gl)来分配布尔值?可以使用 urllib.urlopen 来验证链接是否为短链接吗?

这是一个伪 Python,希望能说明我正在尝试做的事情:

if urllib.urlopen(df['url']) != df['url']:
    df['short_url'] = True
else:
    df['short_url'] = False

【问题讨论】:

  • 但是在这里您将布尔值分配给
  • 对 - 我将修改问题以澄清
  • 您可能需要点击 url 并查看您是否获得 3xx 状态。即使那样我也不认为你可以确定它是一个缩短的网址。其他选项可能会维护一个已知网址缩短服务的列表。
  • 好的,谢谢保罗。听起来这可能很难全面实施。

标签: python pandas url


【解决方案1】:

本质上,“短网址”是一个外观网址,它只是重定向到最终网址。所以你可以使用 urllib2 中的 getUrl 方法。

geturl() — 返回检索到的资源的 URL,通常用于 确定是否遵循了重定向

import urllib2
original_url = 'http://someshorturl/5b2su2'
response = urllib2.urlopen(original_url)
# final_url != original_url if redirected
final_url = response.geturl() 
# response_code will be 302 for redirects
response_code = response.getcode()

if response_code == 302:
    # redirected so this may a short url
else:
    # this is not a short url

当然,这有一个缺陷,因为任何 url 都可以是重定向......不仅仅是来自 url 缩短服务(如 goo.gl 或 tinyrl)的短 url。

如果您确实需要 100% 确定,那么您可能需要针对已知的 url 缩短服务域对 url 进行正则表达式测试。您可能需要做一些事情来满足您的要求。

【讨论】:

  • 谢谢,卡尔文。好点 - 我没有考虑到其他类型的链接可以重定向。尽管如此,这还是给了我一些工作的余地。
猜你喜欢
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 2011-11-01
  • 2012-10-29
  • 1970-01-01
  • 2015-07-25
相关资源
最近更新 更多