【爬虫进阶】Js逆向——有道批量翻译文本
前言
想要更进一步了解爬虫领域,学Js肯定是必不可少的,怎么说呢?现在大部分网站开始对数据层层加密,导致我们要花费大量的精力去研究,如果不了解的话,甚至连入口都找不到!这时候就会有人说:用selenium不就行了,确实没问题,但是要想想效率高吗?要是10w+的数据量,那得跑多久?如果生产使用,你要怎么办?你跟老板说,机器慢我也没办法?回到主题,js逆向没有固定的方法论,所以也没有一定的解决方法,只能见招拆招
案例
最近因工作原因需要抓一些产品评论,但是评论都是英文的,加上本人英语较烂,还得借助翻译,总不能手动一条一条翻译吧,所以我找了一个免费的翻译接口(),分享给大家!!!
难点
总而言之,言而总之!直接步入正题
参数加密
import js2py
r = js2py.eval_js((new Date).getTime()) # 时间戳
bv = str(md5(5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36)) # md5加密请求头
ts = str(r)
salt = ts + str(random.randint(0,10)) # 时间戳 + 一个随机整数
sign = md5("fanyideskweb" + e + salt + "Ygy_4c=r#e#4EX^NUGUc5") # 签名加密
body = {
i: e, # e是你输入的文字,比如我输入love
from: AUTO,
to: AUTO,
smartresult: dict,
client: fanyideskweb,
salt: salt,
sign: sign,
lts: ts,
bv: bv,
doctype: json,
version: 2.1,
keyfrom: fanyi.web,
action: FY_BY_REALTlME
} # 请求参数
第七步:我们将js代码转成成python代码,也可以通过js2py或者execjs来运行Js代码,因为加密比较简单,所以我通过转换代码,大家更容易理解!
IP封禁
翻译的文本较多,翻了一会发现报错,我就知道应该没那么简单,那就找找原因吧!其实只要经验比较丰富的朋友都知道,基本上就是IP封了。 上图显示,状态码:302,连网页都封了,这下就很容易解释了,好了,可以直接去购买代理了!!!
代理:我用的小象代理,不推荐大家用什么,自己觉得好用就行。
request调用
proxy_host = http-dynamic-S03.xiaoxiangdaili.com
proxy_port = 10030
proxy_username = *******
proxy_pwd = ********
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host": proxy_host,
"port": proxy_port,
"user": proxy_username,
"pass": proxy_pwd,
}
proxies = {
http: proxyMeta,
https: proxyMeta,
}
try:
res = requests.get(url=url, proxies=proxies)
print(res.text)
except Exception as e:
print e
代码解析
-
md5
def md5(value):
x = hashlib.md5()
x.update(value.encode(utf-8))
return x.hexdigest()
-
请求参数
def from_data(e):
r = js2py.eval_js((new Date).getTime()) # 时间戳
bv = str(md5(5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36)) # md5加密请求头
ts = str(r)
salt = ts + str(random.randint(0,10)) # 时间戳 + 一个随机整数
sign = md5("fanyideskweb" + e + salt + "Ygy_4c=r#e#4EX^NUGUc5") # 签名加密
body = {
i: e, # e是你输入的文字,比如我输入love
from: AUTO,
to: AUTO,
smartresult: dict,
client: fanyideskweb,
salt: salt,
sign: sign,
lts: ts,
bv: bv,
doctype: json,
version: 2.1,
keyfrom: fanyi.web,
action: FY_BY_REALTlME
} # 请求参数
return body
-
爬取数据
翻译评论
这是我爬取的评论,然后保存到xlsx中
