码迷,mamicode.com
首页 > 编程语言 > 详细

python爬有道翻译

时间:2019-09-28 00:51:25      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:代理   put   key   使用   add   ==   字典   urlopen   one   

 

在有道翻译页面中打开开发者工具,在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)
    

 

python爬有道翻译

标签:代理   put   key   使用   add   ==   字典   urlopen   one   

原文地址:https://www.cnblogs.com/-jiandong/p/11600927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!