入门写翻译来熟悉urllib。
翻译:
import urllib.request as urlreq
import urllib.parse as urlparse
import json
content = input('请输入要翻译的内容: ')
#有道翻译
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {
'i' : content,
'from' : 'zh-CHS',
'to' : 'ja',
'smartresult' : 'dict',
'client' : 'fanyideskweb',
'salt' : '15554271260136',
'sign' : '947fbcd3d621ed6a5280762e2b8541d3',
'doctype' : 'json',
'version' : '2.1',
'keyfrom' : 'fanyi.web',
'action' : 'FY_BY_CLICKBUTTION'
}
#添加响应头来隐藏自己
head = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0'
}
data = urlparse.urlencode(data).encode('UTF-8')#dict->str->bytes
req = urlreq.Request(url, data, headers = head)
#req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0')
response = urlreq.urlopen(req)
html = response.read().decode('utf-8')#html为bytes,为json结构: bytes->str
target = json.loads(html)#反序列化得到字典: str->dict
print(target['translateResult'][0][0]['tgt'])
#金山翻译
'''
url = 'http://fy.iciba.com/ajax.php?a=fy'
data = {
'f' : 'auto',
't' : 'de',
'w' : content
}
data = urlparse.urlencode(data).encode('UTF-8')
response = urlreq.urlopen(url, data)
html = response.read().decode('utf-8')
target = json.loads(html)
print(target['content']['out'])
'''
#百度翻译
'''
#zh : 中文,en : 英文,de : 德语,jp : 日语
url = 'https://fanyi.baidu.com/transapi'
data = {
'from' : 'zh',
'to' : 'de',
'query' : content,
}
data = urlparse.urlencode(data).encode('UTF-8')
response = urlreq.urlopen(url, data)
html = response.read().decode('utf-8')
target = json.loads(html)
print(target['data'][0]['dst'])
'''
代理ip:
先说一下OpenerDirector类:
http://www.iteedu.com/plang/python/urllib2/opener.php (取上)
当你获取一个URL时,你使用一个opener(OpenerDirector)。正常情况下我们一直使用默认的opener,通过urlopen,但你也可以创建自定义的openers。
OpenerDirector操作类是一个管理很多处理类(Handler)的类。而所有这些 Handler 类都对应处理相应的协议,或者特殊功能。
分别有下面的处理类:BaseHandler,HTTPErrorProcessor,HTTPDefaultErrorHandler,HTTPRedirectHandler,ProxyHandler,
AbstractBasicAuthHandler,HTTPBasicAuthHandler,ProxyBasicAuthHandler,AbstractDigestAuthHandler,
ProxyDigestAuthHandler,AbstractHTTPHandler,HTTPHandler,HTTPCookieProcessor,UnknownHandler,
FileHandler,FTPHandler,CacheFTPHandler
urllib.request.ProxyHandler(proxies=None)
标准库解释:
导致请求通过一个代理。如果代理是给定的,它必须是一个字典的代理协议名称映射到url。默认值是从环境变量的列表 _proxy中读取代理。如果没有代理设置环境变量,那么在Windows环境中代理设置了从注册表部分的网络设置,在Mac OS X环境代理信息检索的OS X系统配置框架。
禁用一个代理传递一个空的字典。
你可以用build_opener,这是一个很方便的创建opener对象的函数,它只有一个函数调用。
标准库解释:
urllib.request.build_opener([handler, …])
返回一个顺序的链的处理程序 OpenerDirector的实例。处理程序可以是BaseHandler的实例,或者 BaseHandler的子类(在这种情况下,必须调用没有参数的构造函数)。下面这些类的实例将提前处理程序,除非处理程序包含它们,或者它们子类的实例:ProxyHandler(如果检测到代理设置), UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor.
如果Python安装SSL支持(即如果 ssl模块可以被导入), HTTPSHandler也将被添加。
一个 BaseHandler子类也可以通过改变它的 handler_order属性来修改它再处理程序列表中的位置。
install_opener能设置一个全局opener对象,这意味着调用urlopen将会都用你刚安装的opener。
标准库解释:
urllib.request.install_opener(opener)
安装一个 OpenerDirector实例作为全球默认的opener 。安装一个opener 必要的,如果你想让urlopen使用这个opener ;否则,简单地调用 OpenerDirector.open()而不是 urlopen()。这样代码不会检查一个真实的 OpenerDirector并且任何类的适当的接口都可以运作。
opener对象有一个open方法,它可以以一种和urlopen函数同样的方式直接调用来获取url:除非是为了方便,没有必要调用install_opener。
代码:
import urllib.request as urlreq
url = 'https://www.baidu.com'
proxy_support = urlreq.ProxyHandler({'http':'60.217.64.237:63141'})
#定制、创建一个opener
opener = urlreq.build_opener(proxy_support)
opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0')]
#安装opener,意味着调用urlopen将会都是用自己定制的opener
urlreq.install_opener(opener)
response = urlreq.urlopen(url)
html = response.read()
print(html)