Python网络爬虫(2)- 爬虫翻译程序-含有道、金山、百度翻译

1.0 版本

#首先贴上结果,自动检测语言

Python网络爬虫(2)- 爬虫翻译程序-含有道、金山、百度翻译_第1张图片

对于这种需要提交数据的爬虫,最主要的就是获取form data了,具体的获取方式请参考

如何通过Chrome获取post表单数据

这里需要注意的是,同一个网站的表单的属性名可能会有变化,自己使用的时候需要注意,否则可能会导致结果不对,或者乱码什么的。

下面是基于python3.6.1版本的程序

# -*- coding: UTF-8 -*-
from urllib import request
from urllib import parse
import json

if __name__ == "__main__":
    #Request URL
    Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    #创建Form_Data字典,存储得到的Form Data
    Form_Data = {}
    Form_Data['type'] = 'AUTO'
    Form_Data['from'] = 'AUTO' #自动检测语言
    Form_Data['to'] = 'AUTO'
    Form_Data['smartresult'] = 'dict'
    Form_Data['doctype'] = 'json'
    Form_Data['version'] = '2.1'
    Form_Data['keyfrom'] = 'fanyi.web'
    Form_Data['action'] = 'FY_BY_REALTIME'
    #使用urlencode方法转换标准格式
    while 1:
        Form_Data['i'] = input("请输入要翻译的内容:")
        if Form_Data['i'].lower()=='exit':
            print('已退出')
            exit(0)
        data = parse.urlencode(Form_Data).encode('utf-8')
        #传递Request对象和转换完格式的数据
        response = request.urlopen(Request_URL,data)
        #读取信息并解码
        html = response.read().decode('utf-8')
        #使用JSON
        translate_results = json.loads(html)
        #找到翻译结果
        translate_results = translate_results['translateResult'][0][0]['tgt']
        #打印翻译信息
        print("翻译的结果是:%s" % translate_results)

2.0 版本 2018-3-29更新

在昨天的基础上,加入了金山和百度的翻译,以及对三者的结果进行比较的程序

先贴上结果

 

Python网络爬虫(2)- 爬虫翻译程序-含有道、金山、百度翻译_第2张图片

 

然后贴上代码(注意,现在这个2.0版本中,金山和有道的正常使用,可以输入任何语言。百度的目前只能支持英译中,百度的是真的难搞,有兴趣的童鞋可以给你几个参考链接:百度翻译最新接口破解    百度翻译通用API(第二个链接是百度官方的,但是版本比较旧,和现在的API区别比较大,而且从爬取的难度上来说,百度要比其他两个更难许多),在百度的官方参考代码中,使用的是python2版本的,我这里自己写了python3版本的)

# -*- coding: UTF-8 -*-
from urllib import request
from urllib import parse
import json
import random
import _md5
import hashlib


def process(Request_URL,Form_Data):
    # 使用urlencode方法转换标准格式
    data = parse.urlencode(Form_Data).encode('utf-8')
    # 传递Request对象和转换完格式的数据
    response = request.urlopen(Request_URL, data)
    # 读取信息并解码
    html = response.read().decode('utf-8')
    # 使用JSON
    translate_results = json.loads(html)
    return  translate_results

def Jinshan(onlyone=1,word=None):
    Request_URL = 'http://fy.iciba.com/ajax.php?a=fy'
    #创建Form_Data字典,存储Form Data
    Form_Data = {'f' : 'auto',
                 't' : 'auto'}
    if onlyone==0:
        Form_Data['w']=word
        translate_results = process(Request_URL, Form_Data)
        # 找到翻译结果
        if 'out' in translate_results['content']:
            translate_results = translate_results['content']['out']
        else:
            translate_results = translate_results['content']['word_mean']
        # 打印翻译信息
        print("金山翻译结果是:%s" % translate_results)
        return
    print('正在使用金山词霸\n')
    while 1:
        Form_Data['w'] = input("请输入要翻译的内容:")
        if Form_Data['w'].lower()=='exit':
            print('已退出金山词霸')
            return
        translate_results=process(Request_URL,Form_Data)
        #找到翻译结果
        if 'out' in translate_results['content']:
            translate_results = translate_results['content']['out']
        else:
            translate_results = translate_results['content']['word_mean']
        #打印翻译信息
        print("金山翻译结果:%s" % translate_results)

def Youdao(onlyone=1,word=None):
    #对应上图的Request URL
    Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    #创建Form_Data字典,存储Form Data
    Form_Data = {'type' : 'AUTO',
                 'from' : 'AUTO',
                 'to'   : 'AUTO',
                 'smartresult':'dict',
                 'doctype': 'json',
                 'version': '2.1',
                 'keyfrom': 'fanyi.web',
                 'action' : 'FY_BY_REALTIME'
                 }

    if onlyone==0:
        Form_Data['i']=word
        translate_results = process(Request_URL, Form_Data)
        # 找到翻译结果
        result = translate_results['translateResult'][0][0]['tgt']
        # 打印翻译信息
        print("有道翻译结果:%s" % result)
        return
    print('正在使用有道翻译\n')
    while 1:
        Form_Data['i'] = input("请输入要翻译的内容:")
        if Form_Data['i'].lower()=='exit':
            print('已退出有道翻译')
            return
        translate_results = process(Request_URL, Form_Data)
        #找到翻译结果
        result = translate_results['translateResult'][0][0]['tgt']
        # 打印翻译信息
        print("有道翻译结果:%s" % result)

def Baidu(onlyone=1,word=None):
    Request_URL = 'https://fanyi-api.baidu.com/api/trans/vip/translate'
    # 创建Form_Data字典,存储Form Data
    Form_Data = {'from' : 'auto',
                 'to'   : 'zh',
                 'appid':'20151113000005349',
                 'salt': random.randint(32768, 65536).__str__(),
                 }
    secretKey = 'osubCEzlGjzvw8qdQc41'

    if onlyone==0:
        Form_Data['q']=word
        sign = Form_Data['appid'] + Form_Data['q'] + Form_Data['salt'] + secretKey
        Form_Data['sign'] = hashlib.md5(sign.encode(encoding='gb2312')).hexdigest()
        translate_results = process(Request_URL, Form_Data)
        # 找到翻译结果
        result = translate_results['trans_result'][0]['dst']
        # 打印翻译信息
        print("百度翻译结果:%s" % result)
        return
    print('正在使用百度翻译\n')
    while 1:
        Form_Data['q'] = input("请输入要翻译的内容:")
        if Form_Data['q'].lower()=='exit':
            print('已退出百度翻译')
            return
        sign =Form_Data['appid'] + Form_Data['q'] + Form_Data['salt'] + secretKey
        Form_Data['sign'] = hashlib.md5(sign.encode(encoding='gb2312')).hexdigest()

        translate_results = process(Request_URL, Form_Data)
        #找到翻译结果
        print(translate_results)
        result = translate_results['trans_result'][0]['dst']

        # 打印翻译信息
        print("百度翻译结果:%s" % result)

def all():
    while 1:
        word=input("请输入要翻译的内容:")
        if word=='exit':
            print('已退出')
            return
        Youdao(0,word)
        Jinshan(0,word)
        Baidu(0,word)

if __name__ == '__main__':
    soft=input("请选择要使用的翻译软件:1.有道翻译 2.金山词霸 3.百度翻译 4.都看一下呗")
    if soft=='1':
        Youdao()
    elif soft=='2':
        Jinshan()
    elif soft == '3':
        Baidu()
    elif soft=='4':
        all()
    else:
        print('hhh,您这输的小的没设置的选项啊')

    print("白白,欢迎下次再来使用")

 

 

 

你可能感兴趣的:(Pyhon,爬虫)