python练习8:对有道翻译爬取程序的第三次改进之让程序像个正常人

先上代码:

import urllib.request
import urllib.parse
import json
import time # 增加引入time模块


while True:
    content = input('输入要翻译的内容(输入'q!'退出翻译): ')

    def trans():
        url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

        '''
        head = {}
        head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'
        '''
        
        data = {}
        data['i'] = content
        data['from'] = 'AUTO'
        data['to'] = 'AUTO'
        data['smartresult'] = 'dict'
        data['client'] = 'fanyideskweb'
        data['salt'] = '15938760135952'
        data['sign'] = 'af3f1c36a96655e1a13616ec4e523d9c'
        data['ts'] = '1593876013595'
        data['bv'] = 'ce1fe729a12a6b5169046dd3aac11e4c'
        data['doctype'] = 'json'
        data['version'] = '2.1'
        data['keyfrom'] = 'fanyi.web'
        data['action'] = 'FY_BY_CLICKBUTTION'
        data = urllib.parse.urlencode(data).encode('utf-8')

        req = urllib.request.Request(url, data)
        req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36')
        response = urllib.request.urlopen(req)
        html = response.read().decode('utf-8')
        target = json.loads(html)['translateResult'][0][0]['tgt']
        print('翻译结果: ', target)


    while content == '':
        time.sleep(2) # 给每次访问加入休息时间
        content = input('重新输入要翻译的内容: ')
            
    else:
        if content == 'q!':
            break
        else:
            trans()
            time.sleep(2) # 给每次访问加入休息时间,让两次翻译之间等待两秒

本次改进的功能有:
1,增加了退出功能,输入q!就能结束输入翻译内容的提示,退出翻译程序
2,增加了翻译间隔,翻译完成后,需要等待两秒后,才能进行下一次翻译

增加访问间隔的原因是什么?
网站为了减少杀掉爬虫程序,也为了在一定时间内减少被访问次数,网站都会给访问次数加上阈值,也就是说,当你翻译了一次之后,在若干秒后,不能进行下一次翻译,如果在单位时间内访问次数超过阈值,就会被服务器判定为爬虫程序,被干掉。 正常人在短时间内很难对服务器发送多次请求,所以正常人的访问是安全的。加入时间间隔的目的,也就是为了让程序像个正常人一样去访问服务器,从而躲过服务器的检查。

但是,这样就产生了一个问题,每次都要休息那么久,效率不是大大降低了吗?还有别的办法处理这个问题吗?

猜你喜欢

转载自blog.csdn.net/tuzi007a/article/details/107133734