#隐藏,服务器会检查headers中的User-Agent来判断是爬虫还是用户,因此
#可以修改headers参数,headers是字典格式
import urllib.request
import urllib.parse
import json
wait_trans=input('请输入需要翻译的内容:')
head={} #新建一个字典
head['User-Agent']='Mozilla/5.0 (Windows NT 6.3; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0'#加入User-Agent值(网页上的‘消息头’有)
#也可使用add_header()方法添加
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data={}
data['i']=wait_trans
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='15636742003312'
data['sign']='1c67f6ad04603cf424367d33bebe8b8c'
data['ts']='1563674200331'
data['bv']='e2a78ed30c66e16a857c5b6486a1d326'
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,head)#urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
#head不能添加到urllib.request.urlopen中,因为urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
#参数中没有head
response=urllib.request.urlopen(req)
#对于urllib.request.urlopen可以传进一个str对象也可以传入一个Request对象
#直接传入网址,则为str对象;这里的req为Request对象
html=response.read().decode('utf-8')
json_1=json.loads(html)
print(json_1["translateResult"][0][0]['tgt'])
#=延迟、代理=========#
#爬虫下载文件通常很快,服务器会识别这种非人类行为。为了解决这个问题,可以1、使用延迟提交时间。2、代理
#1、延时 缺点是太慢
import urllib.request
import urllib.parse
import json
import time #添加时间模块,用于延时
while True: #添加循环
wait_trans=input('请输入需要翻译的内容(输入e退出翻译程序):') #可以加入条件,方便退出程序
if wait_trans=='e':
print('退出程序')
break
head={} #新建一个字典
head['User-Agent']='Mozilla/5.0 (Windows NT 6.3; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0'#加入User-Agent值(网页上的‘消息头’有)
#也可使用add_header()方法添加
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data={}
data['i']=wait_trans
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='15636742003312'
data['sign']='1c67f6ad04603cf424367d33bebe8b8c'
data['ts']='1563674200331'
data['bv']='e2a78ed30c66e16a857c5b6486a1d326'
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,head)
response=urllib.request.urlopen(req)
html=response.read().decode('utf-8')
json_1=json.loads(html)
print(json_1["translateResult"][0][0]['tgt'])
time.sleep(5) #延时5s
'''
输出如下:(延时5秒的循环)
请输入需要翻译的内容(输入e退出翻译程序):你好
hello
请输入需要翻译的内容(输入e退出翻译程序):我
I
请输入需要翻译的内容(输入e退出翻译程序):你
you
'''
#2、使用代理 =======
import urllib.request
url={'http://www.whatismyip.com.tw'}
proxy_support=urllib.request.ProxyHandler({'http':'183.129.207.86:14002'})
opener=urllib.request.build_opener(proxy_support)#建立opener
urllib.request.install_opener(opener) #安装opener
request=urllib.request.urlopen(url) #返回
html=response.read().decode('utf-8')
print(html)