【爬虫进阶】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中

完整代码

成果

最后

经验分享 程序员 微信小程序 职场和发展