破解百度翻译|5

破解百度翻译|5

写在前面

你好,我是禅墨

转眼间就到了周五了,happy啊!

上篇文章我们做了一个简易得网页采集器,感觉没啥难度,那这次我们就再做一个没啥难度的东西,搞一下百度翻译,想了想,还是最后把程序打一下包,作为一个小工具使用!

指定url及响应分析

你看,爬虫第一步总是要指定URL,但是这个是需要我们在浏览器中寻找的。

  1. 打开浏览器(以Chrome为例)找到百度翻译首页,思考一下,首页会是我们要破解的内容吗?那我们需要获取的内容是哪些呢?不妨我们输入一个单词,比如说:cat,这时我们看一下页面上就会出现具体的内容。那红框线框出来的就是我们需要的内容。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

  2. 那我们如何找到这一部分内容呢,按下F12,找network,页面响应对应的XHR,这时会发现什么都没有,我们需要把刚刚的cat删掉,这时我们会在右边直接看到有两个sug,我们点开headers往下查找,会发现从上往下对应的分别是kw:ca,kw:c ,这是不是就是我们删除时留下的字母顺序,那说明我们要找的界面就是它吧。

    在这里插入图片描述

  3. 我们翻看到前面会发现,他的完整请求地址,以及类型为POST,说明这是一个带有参数的请求,参数是什么呢,是不是就是我们刚刚寻找到的kw啊

在这里插入图片描述

  1. 我们来复盘一下,针对这个请求地址,post请求每次多携带一个字符作为参数向服务器发送请求,直到组成我们需要翻译的单词,然后服务器会响应请求,做出回应数据。那么响应类型是什么呢?

  2. 我们会看到一个Response Headers,这就是响应的具体内容,Content-Type说明这时一个json响应。

在这里插入图片描述

编码详情

前面的准备工作我们已经做的很充分了,后面就是按照正常的顺序进行敲代码了,不清楚的可以回看这里

https://chanmoyun.gitee.io/2021/01/28/04.%E7%AE%80%E6%98%93%E7%BD%91%E9%A1%B5%E9%87%87%E9%9B%86/

在这里需要声明一点,我们之前使用的是text()获取响应数据的,但是对于json类型,我们需要用json()获取响应数据,返回的是obj类型。

源码及解析:

# -*- coding:utf-8 -*-
import json
import requests
if __name__ == '__main__':
    # 1-指定url
    post_url = 'https://fanyi.baidu.com/sug'
    # 2-进行UA伪装
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'}
    # 3-post请求参数处理(同get请求一致)
    word = input('Enter a word:')
    data = {'kw':word}
    # 4-请求发送
    response = requests.post(url=post_url,data=data,headers=headers)
    # 5-获取响应数据:json()方法返回的是obj(如果确认响应数据是json类型的,才能使用json())
    dic_obj = response.json()
    print(dic_obj)
    # 持久化存储
    filename = word+'.json'
    fp = open(filename,'w',encoding='utf-8')
    json.dump(dic_obj,fp=fp,ensure_ascii=False)
    print('OK!')

制作exe可执行文件

当我们想具体使用时,总不能每次都去打开编辑器运行吧,所以我们需要对程序进行打包,有很多方式,这里我们选择pyinstaller工具包

  1. 首先,打开工具包,我们直接输入命令,这样安装的就是在全局变量中

    pip install pyinstaller
    

    如果之前按照步骤更改过pip镜像源,安装起来就会非常快(文章环境安装部分https://chanmoyun.gitee.io/2021/01/27/03.Requests%E7%AC%AC%E4%B8%80%E8%A1%80/)

  2. 安装完成之后,我们可以在cmd中切换到想要打包的文件所在的文件夹下,但是如果使用的pycharm,直接点击下方的Terminal即可。

  3. 在打包之前,我们需要考虑,程序执行一次只能翻译一个,我们是不是需要给他写成死循环啊,然后我们之前定义的是有永久化存储的,现在也不需要了,所以我们的程序就可以改成:

    # -*- coding:utf-8 -*-
    import requests
    while(True):
        # 1-指定url
        post_url = 'https://fanyi.baidu.com/sug'
        # 2-进行UA伪装
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'}
        # 3-post请求参数处理(同get请求一致)
        word = input('Enter a word:')
        data = {'kw':word}
        # 4-请求发送
        response = requests.post(url=post_url,data=data,headers=headers)
        # 5-获取响应数据:json()方法返回的是obj(如果确认响应数据是json类型的,才能使用json())
        dic_obj = response.json()
        print(dic_obj)
    
  4. 那你想没想过,pyinstaller打包的是整个环境,如果你的当前环境有很多包,那是不是打包就会很慢,甚至会出现打包失败,就算会成功那也会生成很大的文件,那怎么办?有pycharm这么优秀的工具不能浪费啊,我们可以单独建一个虚拟环境,把py文件写在里面,里面只有需要的包,其他都不要,这样不就全部解决了。

  5. 接下来就正式打包了

    完整示例(不是本程序)

    pyinstaller -F -i tra.ico main.py -n Tra --noconsole
    
    功能注释
    -F打包成一个文件
    -D打包成一个文件夹
    -n重新命名
    –noconsole去掉cmd
    -i加入图标,需要转化为ico

    针对本程序,我们其实只需要输入简短命令就行

    pyinstaller -F Baidu-translation
    

写在后面

OK!这就是本篇文章全部内容了!

欢迎关注禅墨云,我们不见不散!

博客网站同步更新,网址:chanmoyun.gitee.io

这里是引用

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值