问题
因为有道翻译有反爬机制,所以简单的爬肯定不行,最近用Python3 写了一个爬虫程序……
然而,返回结果却是{“errorCode”:50},百感交集。
有人说:需要修改URL
我的URL:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
需要修改成http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule
就是把_o
去掉,去掉之后确实能够正常翻译,既能中译英,也能英译中,但是不知道为什么非要这样做,而且貌似效果不是特别好,如果有大牛知道这两个url的区别还请告知,多谢!
继续完成完美的爬取!
从Form Data中分析原因得知,salt,sign,ts三个参数值是动态变化的,每次请求其值都不同,这表明网站对这三个参数作出了加密反爬机制,若想取得数据,就必须先破解其加密机制。
观察这几个参数,猜测salt和ts参数与时间戳有关,具体使用了何种加密方式,还要去看网页代码元素。
右键,查看网页源代码,在html中并没有找到对应参数,那么就可能在js文件中,在网页的最后一部分代码,根据js文件的文件名,猜测这几个参数的获取方式可能在"fanyi.min.js"文件中。
打开该js文件,发现这个文件是处理过的 js,直接看是难以看出逻辑的,所以可以把 js 代码放到一些可以重新排版的工具中再查看,如在线“站长工具”
最后可以通过搜索“salt”找到几个参数的生成位置,具体代码片段如下:
从上述参数生成代码中,可知:
(1)网站采用的是md5加密
(2)ts = "" + (new Date).getTime() ,为时间戳
(3)salt = "" + (new Date).getTime() + parseInt(10 * Math.random(), 10)
(4)sign = n.md5("fanyideskweb" + e + i + "@6f#X3=cCuncYssPsuRUE")
其中,e为要翻译内容,i为时间戳,等于ts,其余为固定字符串
明确参数获取方式后,即可编写python代码,破解反爬虫机制。
附上python3爬取完美代码:
import hashlib
import random
import time
import urllib.request as requests