最近一直在一个平台学习Python,所以分享下课程里面抓取百度翻译的操作。原理其实也很简单,就是将浏览器请求的操作我们用python进行模拟,从而获取到返回的数据,我们将返回的数据进行提取,从而得到我们想要的内容。

一、安装requests模块

  1.当然如果安装过了就可以跳过这一步了。如果没有安装过可以通过命令行输入 pip install requests 进行安装。如果你是用的pycharm,那么需要在当前工程下的venv里面安装,因为我一开始直接打开命令行输入的命令,安装成功但是程序导入包的时候还是提示找不到这个模块,后面在工程下的venv目录下安装就好了。

       2.当然也可以通过pycharm自带的安装模块进行安装。点击File->settings 找到如下图的位置,输入你需要安装的模块名称,然后点击Install Package即可。当然推荐这种方式安装了。

教你用Python抓取百度翻译-冯金伟博客园

 二、进行百度翻译数据请求的收集

  1.首先我们进入百度的翻译页面,网址 http://fanyi.baidu.com/translate。这里我们需要点开开发者模式(像搜狗浏览器快捷键就是F12),将浏览器切换成手机模式(最上面圈起来的那个小图标点击一下就是手机模式,其他浏览器图标也差不多)。因为PC端的web在post提交数据的时候会有2个我们不好获取的参数(其中一个是token),但是手机版的没有这2个参数,所以我们选择手机版进行所需要的数据收集。

  2.我们输入一个查询的内容,点击翻译按钮。这个时候我们可以看到Network下会有很多文件,我们找到如图下的这个文件,会发现我们想要的一些信息都在这个里面了。

  request URL:请求的地址

  request method:请求的方式,一般常见的也就Post和Get

  user-agent:用户代理,你会发现pc和手机请求的时候这个里面的值是不一样的。而且如果你不设置的话,里面会有一个python的默认值。这个值可能会影响网站给你返回的数据。

  form data:就是我们提交的表单数据了。而参数的zh表示中文,en表示英文,这个可以多获取几个语言的参数,然后自行选择从哪个语言翻译成哪个语言即可。

教你用Python抓取百度翻译-冯金伟博客园

  

  3.我们点击response可以看到返回的数据,我们想要的数据就在这个里面了。

教你用Python抓取百度翻译-冯金伟博客园

  格式化后我们最后可以发现data下的st_tag里面就是我们想要的数据了,到时候直接解析出来这个内容即可。

教你用Python抓取百度翻译-冯金伟博客园

 三、附上Python源码

import requests #导入需要的包
import json

search = input("请输入你要翻译的内容:")

url = "http://fanyi.baidu.com/extendtrans" #请求的地址
headers={"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36"} #设置请求的头部

#设置提交的数据
posData={"query":search,
                "from":"en",
                "to":"zh"}

response = requests.post(url=url,data=posData,headers=headers)#模拟请求

#获取response的数据有2种方式 一种是text获取的直接是文本格式 但是可能有乱码 需要手动设置response.encoding("编码") 解决乱码
#还有一种就是response.content 里面存的是网站直接返回的数据 二进制格式 然后通过decode解码即可
#因为返回的是json对象,所以我们将最后解码后的字符串进行json格式转换 使用json.loads()进行转换
json_data=json.loads(response.content.decode())

#然后我们可以通过格式化工具进行json的解析
print("单词:{0} 翻译:{1}".format(search,json_data["data"]["st_tag"]))

  运行效果

教你用Python抓取百度翻译-冯金伟博客园

  不到10行代码就可以搞定,现在想了想如果用java实现的话恐怕几十行吧,大家也来试试吧^_^