脚本 六月 29, 2022

第一个脚本——百度翻译爬虫

文章字数 754 阅读约需 6 mins 阅读次数 1000000

记录第一次制作脚本

本文记录制作一个调用百度翻译实现翻译功能的小脚本

主要有三个步骤:【找接口】=>【研究关键字】=>【写脚本】

找到翻译请求接口

这一步没有难度,在百度翻译页面打开开发者工具,然后输入哈哈,然后在network里找接口就可以。

如果请求太多的话,可以用Fetch/XHR按钮过滤一下:

可以看到,这是一个POST请求

分析请求关键字

  1. 从上面看到,关键字有fromtoquerytranstypesimple_means_flagsigntokendomain

    分析之后,得出:fromto代表输入语言输出语言query输入文字transtype翻译类型(自动翻译、点击后翻译等,这个关键字并不重要);domain为常值”common”。而signtoken为一串奇怪的数字

  2. from、to指定语言类型,后面发现,from是可以自动检测或者手动指定的。如果希望自动检测,那就需要在请求翻译接口前请求一次langdetect,并匹配出语言类型。

  3. query由用户输入;transtype和simple_means_flag完全可以写死。

  4. 至于token,全局搜索一下那串字符,发现它是请求fanyi.baidu.com时获取到的

    截止到目前,我需要关心的字段有:

    • from:通过langdetect请求获取
    • query:由用户输入
    • token:请求fanyi.baidu.com获取
    • sign:一个神秘字段
  5. 现在来研究这个sign:

    • 像token一样进行全局搜索,没有结果

    • 从v2transapi请求的调用栈中寻找线索

      一层层地观察call stack,在e.onTranslate附近发现可疑之处

      经过打断点调试,发现这里的n就是我输入的哈哈二字,所以,我只需要找到这个x()函数,就能得到sign的值!!!

    • 在控制台里输入x并回车,弹出了我想要的函数。但在复制得到的函数并不能直接运行,因为函数中往往存在一些全局变量或调用了其他函数,这时,需要耐心地把它们补全。经历了一个window.gtk、一个n函数,我终于得到了sign值:

    • 至此,关键字全部复现。

写(抄)脚本

脚本用python编写,写的过程中要注意请求头携带cookie。

另外,我在初次使用PyCharm时,遇到了两个问题:

  • 运行不了js脚本:其实,通过命令行是可以直接node xxx.js的;但最后找到了标准方法——下载nodejs插件。。。

  • py文件中import报错:我明明已经安装过这些库了,怎么说我没有呢?原来新建项目的时候,PyCharm给我在项目目录下放了一个精简的python编译器,而我所安装的库,都在我的AppData那里。。。于是有两种解决思路:一是在项目目录下安装那些库,二是直接使用我自己的解释器。

附:git hub上的百度翻译小爬虫


上一篇 :  
0%