字符串translate方式實現

在爬取百度圖片的時候,發現百度圖片作了反爬蟲處理,在網上找到當前還能跑通的教程實例:python3多線程下載百度圖片搜索結果python

在分析代碼的過程當中,發現做者對爬取的objURL的解碼是經過字符串的translate方式實現的。截止目前,不多用到translate方法,因此記錄下相應的代碼和使用方法。git

百度圖片objURL解碼源碼:github

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 """解碼百度圖片搜索json中傳遞的url
 5 抓包能夠獲取加載更多圖片時,服務器向網址傳輸的json。
 6 其中originURL是特殊的字符串
 7 解碼前:
 8 ippr_z2C$qAzdH3FAzdH3Ffl_z&e3Bftgwt42_z&e3BvgAzdH3F4omlaAzdH3Faa8W3ZyEpymRmx3Y1p7bb&mla
 9 解碼後:
10 http://s9.sinaimg.cn/mw690/001WjZyEty6R6xjYdtu88&690
11 使用下面兩張映射表進行解碼。
12 """
13 
14 str_table = {
15     '_z2C$q': ':',
16     '_z&e3B': '.',
17     'AzdH3F': '/'
18 }
19 
20 char_table = {
21     'w': 'a',
22     'k': 'b',
23     'v': 'c',
24     '1': 'd',
25     'j': 'e',
26     'u': 'f',
27     '2': 'g',
28     'i': 'h',
29     't': 'i',
30     '3': 'j',
31     'h': 'k',
32     's': 'l',
33     '4': 'm',
34     'g': 'n',
35     '5': 'o',
36     'r': 'p',
37     'q': 'q',
38     '6': 'r',
39     'f': 's',
40     'p': 't',
41     '7': 'u',
42     'e': 'v',
43     'o': 'w',
44     '8': '1',
45     'd': '2',
46     'n': '3',
47     '9': '4',
48     'c': '5',
49     'm': '6',
50     '0': '7',
51     'b': '8',
52     'l': '9',
53     'a': '0'
54 }
55 
56 # str的translate方法須要用單個字符的十進制unicode編碼做爲key
57 # value 中的數字會被當成十進制unicode編碼轉換成字符
58 # 也能夠直接用字符串做爲value
59 char_table = {ord(key):ord(value) for key,value in char_table.items()}
60 
61 def decode(url):
62     # 先替換字符串
63     for key,value in str_table.items():
64         url = url.replace(key,value)
65 
66     # 再替換剩下的字符
67     return url.translate(char_table)
68 
69 if __name__=='__main__':
70     url =r"ippr_z2C$qAzdH3FAzdH3Ffl_z&e3Bftgwt42_z&e3BvgAzdH3F4omlaAzdH3Faa8W3ZyEpymRmx3Y1p7bb&mla"
71     print(decode(url))

返回結果:json

  http://s9.sinaimg.cn/mw690/001WjZyEty6R6xjYdtu88&690服務器

以上就是解碼百度的objURL的結果。多線程

 

爲了增強對上面註釋的內容的理解,用最簡單的方式去使用translate。編碼

>>> char_table = {
...     'w': 'a',
...     'k': 'b',
...     'v': 'c',
...     '1': 'd',
...     'j': 'e',
...     'u': 'f',
...     '2': 'g',
...     'i': 'h',
...     't': 'i',
...     '3': 'j',
...     'h': 'k',
...     's': 'l',
...     '4': 'm',
...     'g': 'n',
...     '5': 'o',
...     'r': 'p',
...     'q': 'q',
...     '6': 'r',
...     'f': 's',
...     'p': 't',
...     '7': 'u',
...     'e': 'v',
...     'o': 'w',
...     '8': '1',
...     'd': '2',
...     'n': '3',
...     '9': '4',
...     'c': '5',
...     'm': '6',
...     '0': '7',
...     'b': '8',
...     'l': '9',
...     'a': '0'
... }
>>> uri='http://ghajgjakngadnkaklmaglg.cmmga'
>>> char_table = {ord(key):ord(value) for key,value in char_table.items()}
>>> char_table
{119: 97, 107: 98, 118: 99, 49: 100, 106: 101, 117: 102, 50: 103, 105: 104, 116: 105, 51: 106, 104: 107, 115: 108, 52: 109, 103: 110, 53: 111, 114: 112, 113: 113, 54: 114, 102: 115, 112: 116, 55: 117, 101: 118, 111: 119, 56: 49, 100: 50, 110: 51, 57: 52, 99: 53, 109: 54, 48: 55, 98: 56, 108: 57, 97: 48}
>>> uri.translate(char_table)
'kiit://nk0ene0b3n023b0b960n9n.566n0'
>>> uri
'http://ghajgjakngadnkaklmaglg.cmmga'
相關文章
相關標籤/搜索