zoukankan      html  css  js  c++  java
  • 教你用Python抓取百度翻译

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

    一、安装requests模块

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

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

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

      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表示英文,这个可以多获取几个语言的参数,然后自行选择从哪个语言翻译成哪个语言即可。

      

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

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

     三、附上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"]))

      运行效果

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

  • 相关阅读:
    C#与服务器建立会话,获取SessionId(临时cookie值)
    c# 登录带验证码网站
    ASP读取CSV文件 并添加到数据库
    淘宝开放平台正式环境获取数据(二)
    DragDrop 注册失败的解决方法 转
    c# 获取网站验证码图片
    淘宝开放平台.NET版SDK 测试类
    淘宝开放平台正式环境获取数据(一)
    sqlhelper源码
    博客园看到的socket基本原理
  • 原文地址:https://www.cnblogs.com/smallfoxdog/p/8630974.html
Copyright © 2011-2022 走看看