py实例收藏 · 2021年8月12日

百度搜索结果url加密算法 Python源码

百度搜索结果都是加密过的,比如:

262235.xyz --> https://www.baidu.com/link?url=a3f48d30fc293c5e471ef23de092fddc99b897cd745eeca534dc93

 

以下就是用python实现加密的方法,此方法的缺点是无法加密https的链接,算是比较老的算法,但是仍然可以用(常被seo人士用于shua排名等领域)。

import os
ascii = [
    [ ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/' ],
    [ '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', '[', '\\',']', '^', '_' ],
    [ '`', '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', '{', '|', '}', '~', ' ' ]]
data = [
    [13, 10], [10, 1], [16, 15], [7, 6], [5, 13], [18, 9], [13, 11], [7, 12],
    [10, 5], [15, 9], [15, 9], [13, 5], [16, 11], [0, 1], [8, 2], [8, 5],
    [0, 0], [17, 15], [14, 8], [2, 1], [10, 5], [17, 14], [16, 5], [3, 8],
    [14, 9], [5, 8], [15, 1], [3, 15], [13, 10], [10, 12], [5, 7], [0, 2],
    [18, 14], [0, 15], [1, 6], [13, 5], [2, 1], [15, 14], [18, 8], [18, 9],
    [1, 10], [14, 14], [13, 2], [5, 3], [5, 8], [0, 4], [1, 5], [16, 1],
    [8, 1], [2, 5], [10, 7], [10, 15], [14, 14], [17, 3], [15, 0], [14, 5],
    [7, 7], [3, 4], [14, 8], [12, 0], [13, 12], [12, 3], [6, 5], [3, 1],
    [1, 14], [5, 4], [0, 12], [7, 0], [10, 7], [15, 12], [8, 2], [18, 15],
    [3, 12], [1, 12], [0, 15], [17, 4], [17, 2], [11, 1], [3, 12], [11, 5],
    [0, 13], [1, 1], [2, 12]]
y = [
    '0123456789abcdef', '1032547698badcfe', '23016745ab89efcd',
    '32107654ba98fedc', '45670123cdef89ab', '54761032dcfe98ba',
    '67452301efcdab89', '76543210fedcba98', '89abcdef01234567',
    '98badcfe10325476', 'ab89efcd23016745', 'ba98fedc32107654',
    'cdef89ab45670123', 'dcfe98ba54761032', 'efcdab8967452301',
    'fedcba9876543210' ]
x = [
    '016745', '107654', '234567', '321076', '325476', '452301', '543210',
    '670123', '765432', '761032', '89abcd', '89efcd', '98fedc', 'abcdef',
    'badcfe', 'cdab89', 'dcba98', 'ef89ab', 'fe98ba' ]

def encode_url(url):
    mi = ''
    for i, ch in enumerate(url):
        f_real_x = None
        f_real_y = None
        for real_x, real_y_chs in enumerate(ascii):
            for real_y, real_y_ch in enumerate(real_y_chs):
                if real_y_ch == ch:
                    f_real_x = real_x
                    f_real_y = real_y

        if f_real_y is not None and f_real_x is not None:
            this_data_x = x[data[i][0]]
            encode_x = this_data_x[f_real_x]
            mi = mi + encode_x
            this_data_y = y[data[i][1]]
            encode_y = this_data_y[f_real_y]
            mi = mi + encode_y
            
    return 'https://www.baidu.com/link?url=a3f48d30fc293c5e471ef23de092fddc99' + mi

#  输入 262235.xyz  转换 b897cd745eeca534dc93
if __name__ == '__main__':
    t = encode_url("262235.xyz")
    print( "262235.xyz" + " --> " + t)

 

访问网址即可正常跳转。

另外,如何获取加密之后的真实地址就简单多了,直接http访问加密后的地址,获取返回头部里的301跳转地址就行了。

import requests
url = 'https://www.baidu.com/link?url=a3f48d30fc293c5e471ef23de092fddc99b897cd745eeca534dc93'
r = requests.get(url)
# print(r.text)
print(r.url)

 

本原创文章自由转载,转载请注明本博来源及网址 | 当前页面:蘭雅sRGB 个人笔记 » 百度搜索结果url加密算法 Python源码