python3.x爬虫(二):通过urlopen发送数据获取翻译结果

1.百度翻译爬虫获取翻译结果

   1.1 先了解一下get和post两种HTTP的请求方式

       对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

       对于POST请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 

      (原文章:https://zhuanlan.zhihu.com/p/22536382         来源:知乎)

    1.2使用Google浏览器搜索百度翻译,按f12检查元素,找到v2transapi。

python3.x爬虫(二):通过urlopen发送数据获取翻译结果

1.3 找到headers下的url

python3.x爬虫(二):通过urlopen发送数据获取翻译结果

1.4 找到发送的数据。

python3.x爬虫(二):通过urlopen发送数据获取翻译结果

1.5 程序

# -*- coding: UTF-8 -*-
import urllib.request
import json
content=0
while True:
        content=input("请输入需要翻译的内容:")
        if content!='quit':
                url="http://fanyi.baidu.com/transapi"
                data={}
                data['from']='zh'
                data['to']='en'
                data['query']=content
                data['transtype']='realtime'
                data['simple_means_flag']='3'
                data['sign']='708867.930354'
                data['token']='014b025209d54f068275defdc42850e2'
                data=urllib.parse.urlencode(data).encode("utf-8")
                response=urllib.request.urlopen(url,data)
                html=response.read().decode("utf-8")
                target=json.loads(html)
                #print(target)
                tgt=target['data'][0]['dst']
                print("翻译的结果是:%s"% tgt)
        else:
                break

1.6运行结果

python3.x爬虫(二):通过urlopen发送数据获取翻译结果

2.有道翻译爬虫获取翻译结果

2.1 用EDG浏览器查看有道翻译的请求方式

     1.搜索有道翻译,按f12检查元素,输入一个想要翻译的内容。选择“网络”,点击“post”方法的内容。

python3.x爬虫(二):通过urlopen发送数据获取翻译结果

2.请求接收的地址如下图箭头所示,编程时要用到这个url

python3.x爬虫(二):通过urlopen发送数据获取翻译结果

3.查看发送的请求内容,后边编程会用到。

python3.x爬虫(二):通过urlopen发送数据获取翻译结果

1.3 代码

# -*- coding: UTF-8 -*-
from urllib import request, parse
import json
content=''
if __name__ == '__main__':
    while True:
        content = input("请输入需要翻译的内容:")
        if content == 'quite':
            break
        else:
            # 创建连接接口,这时要去掉原链接translate后边的_0。
            req_url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
            #创建要提交的数据
            Form_Date = {}
            Form_Date['i'] = content
            Form_Date['doctype'] = 'json'
            Form_Date['form'] = 'AUTO'
            Form_Date['to'] = 'AUTO'
            Form_Date['smartresult'] = 'dict'
            Form_Date['client'] = 'fanyideskweb'
            Form_Date['salt'] = '1533907852152'
            Form_Date['sign'] = '99bd0444087044ed238936cc5bd168f1'
            Form_Date['version'] = '2.1'
            Form_Date['keyform'] = 'fanyi.web'
            Form_Date['action'] = 'FY_BY_REALTIME'
            Form_Date['typoResult'] = 'false'
            data = parse.urlencode(Form_Date).encode('utf-8')  # 数据转换,将字典中的信息进行url编码
            response = request.urlopen(req_url, data)  # 提交数据并解析
            html = response.read().decode('utf-8')  # 服务器返回结果读取
            # 可以看出html是一个json格式
            translate_results = json.loads(html)  # 以json格式载入
            translate_results = translate_results['translateResult'][0][0]['tgt']  # json格式调取
            print(translate_results)  # 输出结果

运行结果图

 

python3.x爬虫(二):通过urlopen发送数据获取翻译结果