破解百度翻译|5
写在前面
你好,我是禅墨!
转眼间就到了周五了,happy啊!
上篇文章我们做了一个简易得网页采集器,感觉没啥难度,那这次我们就再做一个没啥难度的东西,搞一下百度翻译,想了想,还是最后把程序打一下包,作为一个小工具使用!
指定url及响应分析
你看,爬虫第一步总是要指定URL,但是这个是需要我们在浏览器中寻找的。
-
打开浏览器(以Chrome为例)找到百度翻译首页,思考一下,首页会是我们要破解的内容吗?那我们需要获取的内容是哪些呢?不妨我们输入一个单词,比如说:cat,这时我们看一下页面上就会出现具体的内容。那红框线框出来的就是我们需要的内容。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
-
那我们如何找到这一部分内容呢,按下F12,找network,页面响应对应的XHR,这时会发现什么都没有,我们需要把刚刚的cat删掉,这时我们会在右边直接看到有两个sug,我们点开headers往下查找,会发现从上往下对应的分别是kw:ca,kw:c ,这是不是就是我们删除时留下的字母顺序,那说明我们要找的界面就是它吧。
-
我们翻看到前面会发现,他的完整请求地址,以及类型为POST,说明这是一个带有参数的请求,参数是什么呢,是不是就是我们刚刚寻找到的kw啊
-
我们来复盘一下,针对这个请求地址,post请求每次多携带一个字符作为参数向服务器发送请求,直到组成我们需要翻译的单词,然后服务器会响应请求,做出回应数据。那么响应类型是什么呢?
-
我们会看到一个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工具包
-
首先,打开工具包,我们直接输入命令,这样安装的就是在全局变量中
pip install pyinstaller
如果之前按照步骤更改过pip镜像源,安装起来就会非常快(文章环境安装部分https://chanmoyun.gitee.io/2021/01/27/03.Requests%E7%AC%AC%E4%B8%80%E8%A1%80/)
-
安装完成之后,我们可以在cmd中切换到想要打包的文件所在的文件夹下,但是如果使用的pycharm,直接点击下方的Terminal即可。
-
在打包之前,我们需要考虑,程序执行一次只能翻译一个,我们是不是需要给他写成死循环啊,然后我们之前定义的是有永久化存储的,现在也不需要了,所以我们的程序就可以改成:
# -*- 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)
-
那你想没想过,pyinstaller打包的是整个环境,如果你的当前环境有很多包,那是不是打包就会很慢,甚至会出现打包失败,就算会成功那也会生成很大的文件,那怎么办?有pycharm这么优秀的工具不能浪费啊,我们可以单独建一个虚拟环境,把py文件写在里面,里面只有需要的包,其他都不要,这样不就全部解决了。
-
接下来就正式打包了
完整示例(不是本程序)
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