urllib爬取异步加载,动态加密网页

爬取有道翻译

有道在线翻译:http://fanyi.youdao.com/
如果直接爬取,返回的信息几乎为0!
第一步:浏览器上打开我们的开发者工具(F12)
第二步:点到network
urllib爬取异步加载,动态加密网页

第三步:在翻译处输入 内容
urllib爬取异步加载,动态加密网页
接下来我们发现这才是我们提交的网址
urllib爬取异步加载,动态加密网页
继续往下看
urllib爬取异步加载,动态加密网页
这是我们提交的数据
所以真实的url=“http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

那我们现在就立马开始

from urllib import request, parse
import time, hashlib,json,random
#有道是需要动态加密  下一遍博客说加密方式
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
#**有道翻译加密需要
salt=int(time.time() * 10000) #时间戳 取上小数点后面的4位
ts = int(time.time() * 1000) #时间戳 取上小数点后面的4位
word = input("请输入要翻译的内容:")

#sign是有道翻译的加密公式 然后再进行md5加密
sign = "fanyideskweb" + word + str(salt) + "[email protected]{h02_BIEe]$P^nG"
md5 = hashlib.md5()
md5.update(bytes(sign, encoding="utf-8"))
sign = md5.hexdigest()

#伪装请求头
headers = {
		'Cookie': '[email protected]|1545122805|0|other|00&99|gud&1545113426&mail163#gud&440100#10#0#0|&0|mail163&unireg|[email protected]; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; [email protected]; JSESSIONID=abcaN_71sYsdlbrJGzkFw; OUTFOX_SEARCH_USER_ID_NCOO=1290461564.900615; ___rl__test__cookies='+str(ts), 
	 #这里要注意最后是一个动态时间戳
	 	'Host': 'fanyi.youdao.com',
	    'Origin': 'http://fanyi.youdao.com',
	    'Pragma': 'no-cache',
	    'Referer': 'http://fanyi.youdao.com/',
	    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
	    'X-Requested-With': 'XMLHttpRequest',
}

#这是我们提交的数据
data = {
    'i': word,
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': str(salt),
    'sign': sign,
    'ts': str(ts),
    'bv': 'b8bcedb6e9d30eb0beaae6f2c4cb90f1',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_REALTIME',
    'typoResult': 'false',
}
#把提交的数据转码
data_str = parse.urlencode(data)
#封装好url 、headers、data_tr
req = request.Request(url=url, headers=headers, data=bytes(data_str,encoding="utf-8"))
#获取翻译返回的内容是一个json格式
content_text = request.urlopen(req).read().decode("utf-8")
#json转码
fanyi_dict=json.loads(content_text)
#提取内容
word_dict=fanyi_dict["translateResult"][0][0]
print("单词:",word_dict["src"],"(",word_dict["tgt"],")")
for i in  fanyi_dict["smartResult"]["entries"][1:]:
    print(i,end="")


加密内容下次详细说!主要我们掌握找异步加载url