美文网首页python学习
爬虫学习记录1-errorcode 50(有道翻译)

爬虫学习记录1-errorcode 50(有道翻译)

作者: 二傻吧 | 来源:发表于2019-01-23 16:37 被阅读0次

    1.首先用了urllib包中的request模块。

    在这个模块中

    response1 = urllib.request.Request(url, data,header)

    response = urllib.request.urlopen(response1)

    这两步的结合就等于urllib.request.urlopen(url,data),但是有点遗憾的是urlopen中不能传入header部分。所以当需要结合header时,我们需要用两步来完成。

    获取来的response,我们可以通过response.read()来获取到反映内容。具体操作见下文:以有道翻译为例,进行了尝试。需要注意的是,用这个包来访问的话我们对编码有要求的话需要引入另一个模块urllib.parse。具体操作见下面:

    源代码:

    import urllib.request

    import hashlib

    import time

    import json

    import random

    import urllib.parse

    class translate(object):

    def __init__(self,mes):

    self.mes=mes

    self.salt=self.get_salt()

    self.sign=self.get_sign(self.salt)

    self.result=self.get_result(self.mes,self.salt,self.sign)

    def get_sign(self,salt):

    value="fanyideskweb"+self.mes+salt+"p09@Bn{h02_BIEe]$P^nG"

            sign=hashlib.md5(value.encode('utf-8'))

    sign=sign.hexdigest()

    return sign

    def get_salt(self):

    tm =int(time.time() *1000)

    rm = random.randint(0, 10)

    st =str(tm + rm)

    return st

    def get_result(self,mes,salt,sign):

    data={

    'i':mes,

                'from':'AUTO',

                'smartresult':'dict',

                'client':'fanyideskweb',

                'salt':salt,

                'sign':sign,

                'ts':"1548211604248",

                'bv':"363eb5a1de8cfbadd0cd78bd6bd43bee",

                'doctype':'json',

                'version':'2.1',

                'keyfrom':'fanyi.web',

                'action':"FY_BY_CLICKBUTTION",

                'typoResult':"true"

            }

    data=urllib.parse.urlencode(data).encode('utf-8')

    header={

    "Cookie":"OUTFOX_SEARCH_USER_ID=-164022675@36.110.13.42;",

                "Referer":"http://fanyi.youdao.com/?keyfrom=dict2.top",

                "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

            }

    url="http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"

            try:

    response1 = urllib.request.Request(url, data,header)

    response = urllib.request.urlopen(response1)

    html=response.read().decode('utf-8')

    html=json.loads(html)

    if 'translateResult' in html:

    rs = html['translateResult'][0][0]['tgt']

    return rs

    else:

    pass

            except:

    return "this is a wrong."

    if __name__=='__main__':

    while True:

    mes=input("请输入内容:")

    if mes =='q':

    break

            t=translate(mes)

    # t.my_ip()

            re=t.result

    print(re)

    time.sleep(5)

    源代码1/3 源代码2/3 源代码3/3

    2. 本来是跟着视频学习,结果有道翻译的源代码改进了,原本的学习代码在访问时会报errorcode 50原来是对参数进行了加密,去查看其中的js文件就可以发现加密内容。

    js中相关部分代码

    3.将本来很简单的代码修改了了一下,根据js中的加密逻辑对内容进行更改就可以了(完成版就是第一部分中展示的源代码)。

    相关文章

      网友评论

        本文标题:爬虫学习记录1-errorcode 50(有道翻译)

        本文链接:https://www.haomeiwen.com/subject/cmqsjqtx.html