urllib.request 模块定义了适用于在各种复杂情况下打开 URL(主要为 HTTP)的函数和类 — 例如基本认证、摘要认证、重定向、cookies 及其它。
官方文档提示对于更高级别的HTTP客户机接口,建议使用Requests包。
使用标准库中的urllib.request.urlopen(url,data = None,[ timeout,] *,cafile = None,capath = None,cadefault = False,context = None )方法。该方法参数简介如下:
url参数是提交的网络地址(地址全程,前端需要协议名,后端需要端口。比如http://192.168.1.1:80)。
data 参数是可选的通常使用不多。如果要添加 data ,它要是字节流编码格式的内容,即 bytes 类型,通过 bytes() 函数可以进行转化,另外如果你传递了这个 data 参数,它的请求方式就不再是 GET 方式请求,而是 POST 。
timeout可选的参数,以秒为单位指定用于阻止连接尝试之类的操作的超时(如果未指定,将使用全局默认超时设置)。
如果指定了context,则它必须是ssl.SSLContext描述各种SSL选项的实例。请参阅HTTPSConnection 以获取更多详细信息。
其他参数:
可选的cafile和capath参数为HTTPS请求指定一组受信任的CA证书。 cafile应该指向包含一堆 CA证书的单个文件,而capath应该指向哈希证书文件的目录。可以在中找到更多信息ssl.SSLContext.load_verify_locations()。
该cadefault参数被忽略。
具体内容参见官方文档
#爬取百度主页
import urllib.request
def clear():
"""清屏"""
print('内容较多,显示3秒后翻页')
time.sleep(3)
OS = platform.system()
if (OS == 'Windows'):
os.system('cls')
else:
os.system('clear')
def linkBaidu():
url = 'http://www.baidu.com'
try:
response = urllib.request.urlopen(url,timeout=3)
#global result
result = response.read().decode('utf-8')
except:
print("网络地址错误")
exit()
with open('baidu.txt','w',encoding='utf8') as f:
f.write(result)
print("获取url信息:response.geturl(): %s" %response.geturl())
print("获取返回代码:response.getcode() %s" %response.getcode())
print("获取返回信息:response.info() %s" %response.info())
print("获取的网页内容已存入当前目录的baidu.txt中,请自行查看")
if __name__ == '__main__':
linkBaidu()
简单的爬取指定信息
import urllib.request
response = urllib.request.urlopen("https://www.baidu.com")
print(response.status) #打印响应状态
print(response.getheaders())
更多示例可以参考urllib.request详细介绍