使用Python生成url短链接的方法

几乎所有的微薄都提供了缩短网址的服务,其原理就是将一个url地址按照一定的算法生成一段字符串,然后加在一个短域名后面边成了一个新的url地址,数据库中会存放这个短地址和原始的地址,当用户点击这个新的短地址后,短地址服务会根据短域名后面的几个字符串从数据库中读出原来的地址然后页面进行跳转 。

比如新浪微薄中的url 是 http://t.cn/xxxxxxx  t.cn是其域名 ,其后面跟着的是7位算出来的字符串。
方法一:使用哈希库自定义算法

因为文本中显示太长的url会比较乱,或者采用省略显示的方式,或者采用短url的方式.

为了同时方便统计点击数以及进行内容过滤.实现了一个生成短url值的方法.

为了防止你的hash值被破解,可以在生成md5值的时候加入你自己的salt.

这样即便直到你的code_map也不能破解到原始url了.

为了让结果更加随机,把每次循环没有使用的第二个bit保存到e里面.这样可以让结果冲突率更小.

#引入哈希库
import hashlib 

def get_md5(s):
  s = s.encode('utf8') if isinstance(s, unicode) else s
  m = hashlib.md5()
  m.update(s)
  return m.hexdigest() 

code_map = (
      'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
      'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' ,
      'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' ,
      'y' , 'z' , '0' , '1' , '2' , '3' , '4' , '5' ,
      '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' ,
      'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' ,
      'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' ,
      'U' , 'V' , 'W' , 'X' , 'Y' , 'Z'
      ) 

def get_hash_key(long_url):
  hkeys = []
  hex = get_md5(long_url)
  for i in xrange(0, 4):
    n = int(hex[i*8:(i+1)*8], 16)
    v = []
    e = 0
    for j in xrange(0, 5):
      x = 0x0000003D & n
      e |= ((0x00000002 & n ) >> 1) << j
      v.insert(0, code_map[x])
      n = n >> 6
    e |= n << 5
    v.insert(0, code_map[e & 0x0000003D])
    hkeys.append(''.join(v))
  return hkeys 

if __name__ == '__main__':
  print get_hash_key('http://www.pythontab.com')

方法二:使用libsurl库

libsurl 是一个用来生成短URL的C和Python库,支持 bit.ly 和 tinyurl 等短url 服务网站。

(0)

相关推荐

  • python检查URL是否正常访问的小技巧

    今天,项目经理问我一个问题,问我这里有2000个URL要检查是否能正常打开,其实我是拒绝的,我知道因为要写代码了,正好学了点Python,一想,python处理起来容易,就选了python,开始把思路想好: 1.首先2000个URL.可以放在一个txt文本内 2.通过python 把内容内的URL一条一条放进数组内 3.打开一个模拟的浏览器,进行访问. 4.如果正常访问就输出正常,错误就输出错误 直接简单粗暴甩代码.因为涉及到隐私,图片打了码 import urllib.request impo

  • Python实现的百度站长自动URL提交小工具

    URL提交是百度提供的一个站长工具,用于给站长提供手工收录某些URL的接口,但是该接口有验证码识别部分,比较难弄.所以编写了如下程序进行验证码自动识别: 主要思路 获取多个验证码,提交到 http://lab.ocrking.com/ 进行多次识别,然后计算每个验证码图片识别出来的 字母或数字 进行统计,得出统计率最高的 即为验证码. 复制代码 代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import requests import t

  • python实现对一个完整url进行分割的方法

    本文实例讲述了python实现对一个完整url进行分割的方法.分享给大家供大家参考.具体分析如下: python对一个完整的url进行分割,将url分割成单独的部分,包括协议.域名.端口.路径.参数等等 import urlparse print urlparse.urlsplit('http://www.jb51.net:80/faq.cgi?src=fie') 结果如下: 复制代码 代码如下: SplitResult(scheme='http', netloc='www.jb51.net:8

  • python提取页面内url列表的方法

    本文实例讲述了python提取页面内url列表的方法.分享给大家供大家参考.具体实现方法如下: from bs4 import BeautifulSoup import time,re,urllib2 t=time.time() websiteurls={} def scanpage(url): websiteurl=url t=time.time() n=0 html=urllib2.urlopen(websiteurl).read() soup=BeautifulSoup(html) pag

  • python根据京东商品url获取产品价格

    京东商品详细的请求处理,是先显示html,然后再ajax请求处理显示价格. 1.可以运行js,并解析之后得到的html 2.模拟js请求,得到价格 # -*- coding: utf-8 -*- """ 根据京东url地址,获取商品价格 京东请求处理过程,先显示html页面,然后通过ajax get请求获取相应的商品价格 1.商品的具体数据在html中的格式,如下(示例) # product: { # skuid: 1310118868, # name: '\u9999\u5

  • python使用正则表达式提取网页URL的方法

    本文实例讲述了python使用正则表达式提取网页URL的方法.分享给大家供大家参考.具体实现方法如下: import re import urllib url="http://www.jb51.net" s=urllib.urlopen(url).read() ss=s.replace(" ","") urls=re.findall(r"<a.*?href=.*?<\/a>",ss,re.I) for i i

  • Python实现从URL地址提取文件名的方法

    本文实例讲述了Python实现从URL地址提取文件名的方法.分享给大家供大家参考.具体分析如下: 如:地址为 http://www.jb51.net/images/logo.gif 要想从该地址提取logo.gif,只需要一句代码就可以搞定 import os url = 'http://www.jb51.net/images/logo.gif' filename = os.path.basename(url) print(filename) 输出为: logo.gif 希望本文所述对大家的Py

  • python对url格式解析的方法

    本文实例讲述了python对url格式解析的方法.分享给大家供大家参考.具体分析如下: python针对url格式的解析,可根据指定的完整URL解析出url地址的各个部分 from urlparse import urlparse url_str = "http://www.163.com/mail/index.htm" url = urlparse(url_str) print 'protocol:',url.scheme print 'hostname:',url.hostname

  • python实现通过代理服务器访问远程url的方法

    本文实例讲述了python实现通过代理服务器访问远程url的方法.分享给大家供大家参考.具体如下: import urllib proxies = {'http' : 'http://proxy:80'} urlopener = urllib.FancyURLopener(proxies) htmlpage = urlopener.open('http://www.baidu.com') data = htmlpage.readlines() print data 希望本文所述对大家的Pytho

  • python打开url并按指定块读取网页内容的方法

    本文实例讲述了python打开url并按指定块读取网页内容的方法.分享给大家供大家参考.具体实现方法如下: import urllib pagehandler = urllib.urlopen("http://www.baidu.com") outputfile = open("index.html", "wb") while 1: data = pagehandler.read(512) if not data: break outputfil

随机推荐