1、urllib其实是一个包,包括了四个模块:
urllib.request:用于打开和读取 URL
urllib.parse:用于分解url
urllib.error:包括了ullib.request产生的异常
urllib.robotparser:分解robots.txt文件
2、来说一下具体用法
比如用于访问百度
首先调用urllib包中request模块,然后用urlopen方法打开URL
另外打印的结果感觉像乱码,实际这是二进制码。需要对其进行解码代码如下:
html=html.decode("utf-8")
print(html)
#要根据网页所使用的编码体制来决定解码,在有道网站上,上面的语句运行后没问题,在百度上,则用utf-8无法解码,搞不清什么原因
3、下载一只猫的例子
从http://placekitten.com/g/200/300下载一张猫的图片
#导入request模块
import urllib.request
#打开网站
response=urllib.request.urlopen('http://placekitten.com/g/200/300')
#将网站的回复赋值给变量cat_img
cat_img=response.read()
#以wb的方法打开文件cat.jpg,因为网站读下来的数据是二进制
with open('cat.jpg','wb') as f:
#将变量cat_jpg写入文件cat.jpg
f.write(cat_img)
实际运行后确实生成了一个cat的jpg文件,但无法打开
原因可能为网站的问题,我之前成功打开网站,也运行成功了。这次网站打不开,所以也下载了空文件。实际原因待查
4、用程序实现有道翻译
用程序实现有道翻译实际是模拟人工访问有道翻译的模式,将其用程序实现
首先用python中的url包中的模块实现访问提交数据,然后获得其接口
但在实际运行以下程序时,发现实际不能正常运行,不知道为什么
运行上述程序后,其结果如下,显示待翻译内容不能获取
# coding=utf-8
"""
created on 2018/3/11
@author:hewp
程序作用:
"""
#引入urllib.request模块和parse模块
import urllib.request
import urllib.parse
#引入json模块,json是一种轻量级的网络数据交换格式,此处调用用于解析URL数据
import json
content=input("请输入需要翻译的内容:")
#输入网站request地址,在网页审查元素中获取
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc'
#定义一个头文件字典,用于存储头文件中的数据
head={}
#以下数据从审查元素中直接复制过来
head['Referer']='http://fanyi.youdao.com/'
head['User-Agent']='Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40'
#data字典中的数据从审查元素中直接复杂
data = {
"type" : "AUTO",
"i" : content,
"doctype" : "json",
"xmlVersion" : "1.8",
"keyfrom" : "fanyi.web",
"ue" : "UTF-8",
"action" : "FY_BY_CLICKBUTTON",
"typoResult" : "true"
}
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')
#此处是为了获取解析html中的内容
target=json.loads(html)
#此处打印中的内容是为了获取键translateResult对应的值
print("翻译结果: %s" (target['translateResult'][0][0]['tgt']))
5、使用代理来访问网站
此点没有实现,代码如下,对代理的机制不太了解,没找到代理ip要专门学习http中网络技术的机制,得专门学习
代码如下:
#程序说明:该程序是使用代理来访问文章,以此避免网站对”非人类“访问的拒绝
import urllib.request
url='http://www.whatismyip.com/'
proxy_support=urllib.request.ProxyHandler({'http':'211.138.121.38:80'})
#创建一个包含代理IP的opener
opener=urllib.request.build_opener(proxy_support)
#安装进默认环境
urllib.request.install_opener(opener)
#试试看IP地址改了没
response=urllib.request.urlopen(url)
html=response.read().decode('utf-8')
print(html)
运行结果如下