当前位置: 移动技术网 > IT编程>脚本编程>Python > python爬有道翻译

python爬有道翻译

2019年09月28日  | 移动技术网IT编程  | 我要评论

安满孕妇奶粉,9c8808,在你吻我之前

 

在有道翻译页面中打开开发者工具,在headers板块找到request url以及相应的data。

 

import urllib.request
import urllib.parse
import json

content=input('请输入需要翻译的内容:')

#_o要去掉,否则会出先error_code:50的报错
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

data={}
#开发者工具里有,i和doctype键不可少
data['i']=content
data['from']='auto'
data['to']='auto'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='15695569180611'
data['sign']='5b0565493d812bc5e713b895c12d615d'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='fy_by_realttime'

#将字典类型的请求数据转化为url编码,并将编码类型转变为'utf-8'类型
data=urllib.parse.urlencode(data).encode('utf-8')

#向url请求data的响应结果
response=urllib.request.urlopen(url,data)

#读取返回数据内容,decode是转换返回数据的格式为str
html=response.read().decode('utf-8')

#使用json将字符串转化成字典
target=json.loads(html)

#结果在key='translateresult'的三层列表的key='tgt'中
print("翻译结果:%s" %(target['translateresult'][0][0]['tgt']))

 

  

上面这种很大可能被有道网页给识别出来不是人工在访问,而是代码在访问。

此时我们可以加个‘user-agent’代理。通过设置user agent来达到隐藏身份的目的,一般情况下浏览器是通过user-agent来识别的。

 

通过调用urllib.request.request()来设置ua。

 

class urllib.request.request(url, data=none, headers={}, origin_req_host=none, unverifiable=false, method=none)

this class is an abstraction of a url request.

  url should be a string containing a valid url. 

  headers should be a dictionary #headers要为字典

 

有两种方法设置user agent:

    1.在创建request对象的时候,填入headers参数(包含user agent信息),这个headers参数要求为字典;

    2.在创建request对象的时候不添加headers参数,在创建完成之后,使用add_header()的方法,添加headers。

import urllib.request
import urllib.parse
import json
import time


while true:
    
    content=input('请输入需要翻译的内容(输入"q!退出程序"):')

    if content=='q!':
        break;

    #_o要去掉,否则会出先error_code:50的报错
    url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    
    '''
    第一种方法
    head={}
    head['user-agent']='mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/65.0.3325.181 safari/537.36'
    '''
    
    data={}
    #开发者工具里有,i和doctype键不可少
    data['i']=content
    data['from']='auto'
    data['to']='auto'
    data['smartresult']='dict'
    data['client']='fanyideskweb'
    data['salt']='15695569180611'
    data['sign']='5b0565493d812bc5e713b895c12d615d'
    data['doctype']='json'
    data['version']='2.1'
    data['keyfrom']='fanyi.web'
    data['action']='fy_by_realttime'

    #将字典类型的请求数据转化为url编码,并将编码类型转变为'utf-8'类型
    data=urllib.parse.urlencode(data).encode('utf-8')

    '''
    第一种方法
    req=urllib.request.request(url,data,head)
    '''
    #第二种方法设置user agent
    #创建request对象
    req=urllib.request.request(url,data)
    req.add_header('user-agent','mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/65.0.3325.181 safari/537.36')

    #传入创建好的request对象
    response=urllib.request.urlopen(req)

    #读取响应信息并解码
    html=response.read().decode('utf-8')

    #使用json将字符串转化成字典
    target=json.loads(html)

    #结果在key='translateresult'的三层列表的key='tgt'中
    print("翻译结果:%s" %(target['translateresult'][0][0]['tgt']))

    #5秒一次
    time.sleep(5)
    

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网