用urllib实现有道翻译接口

写在前面的话上一篇文章我们了解了urllib库的基本使用方法,现在那是迫不及待的想要开始打码呀,我们就从最简单的入手吧,编写一个有道翻译的接口

温馨提示 :博主使用的系统为win10,使用的python版本为3.6.5

一、网页分析

首先我们需要使用浏览器对网站进行分析,博主这里使用的浏览器为Chrome浏览器,用Chrome浏览器打开有道翻译,然后使用其自带的开发者工具的Network选项卡进行抓包分析
抓包分析

在输入框中输入文字(这里实例就输入“爬虫”好了),可以看到出现了很多请求,然后我们选择XHR进行过滤,发现只有一个请求符合要求,那么明显这个请求就是我们需要抓的包
抓包分析

分析该请求的Headers选项卡,我们需要关注以下几个方面:

  • Request URL:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
    可是当我们直接打开这个网址的时候,却发现返回的是:{“errorCode”:50},额,好吧,看来是我们的接口找错了,然后我们尝试着把不必要的参数去掉,只留下了 http://fanyi.youdao.com/translate_o,再打开网址发现还是显示{“errorCode”:50},最后把看起来不太友好的_o也去掉了,只剩下 http://fanyi.youdao.com/translate,这下子终于找对了吧

  • Request Method:POST(POST请求的请求参数包含在Form Data数据中)

  • Request Headers

    • User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
  • Form Data(这里需要根据实际情况进行筛选,只留下必要的)

    • i:爬虫,这里就是翻译的主体内容了
    • doctype:json,指定返回数据的格式
    • from:AUTO
    • to:AUTO
      分析Headers

分析该请求的响应,即选项卡Response,发现返回的是一个Json格式的数据,所以我们需要导入json模块对返回的数据进行分析处理,把我们需要的翻译结果提取出来
分析Response

二、编码实现

好了,分析完成了,下面就开始敲代码了(简简单单的二十多行代码就可以完成了)

import urllib.request
import urllib.parse
import json

#把接口封装成一个函数
def translate(content):
    #考虑特殊情况
    if content == "" :
        return ""

    #起始URL
    url = "http://fanyi.youdao.com/translate" 

    #构造POST请求的Form Data
    params = {
        'i':content,
        'doctype':'json',
        'from':'AUTO'
        'to''AUTO'
    }
    data = urllib.parse.urlencode(params).encode('utf-8')

    #构造Request Headers
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }

    #构造Request对象
    req = urllib.request.Request(url,data=data,headers=headers,method='POST')

    #发送请求,得到响应
    response = urllib.request.urlopen(req)

    #解析数据
    result = json.loads(response.read().decode('utf-8'))
    return result['translateResult'][0][0]['tgt']

if __name__ == "__main__":
    print('请输入翻译内容,输入"quit"退出')
    while(True):
        content = input('翻译内容:')
        if(content == 'quit'):
            break
        result = translate(content)
        print("翻译结果:%s" % result)

写在后面的话 :这篇文章我们简单的应用urllib实现了有道翻译的接口,但是想要深入爬虫,学习一些网页解析的方法肯定是必须的,所以下一篇文章我们将了解一下Python中re模块的基本使用方法,谢谢大家

猜你喜欢

转载自blog.csdn.net/wsmrzx/article/details/81604303
今日推荐