zoukankan      html  css  js  c++  java
  • python爬有道翻译

    在有道翻译页面中打开开发者工具,在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)
        
  • 相关阅读:
    Mybatis Generator生成Mybatis Dao接口层*Mapper.xml以及对应实体类
    ssh通过pem文件登陆服务器
    maven私服nexus上传第三方jar包以及下载
    springboot不占用端口启动
    springboot2.x纯注解整合dubbo
    mysql5.7 group by语法 1055
    java读取pdf文本转换html
    java 记录对象前后修改的内容(工具类)
    在docker中运行mysql实例
    Linux编辑启动停止重启springboot jar包脚本
  • 原文地址:https://www.cnblogs.com/-jiandong/p/11600927.html
Copyright © 2011-2022 走看看