第1关:urllib
任务描述
本关任务:使用python内置库urllib发起请求并返回状态码。
相关知识
Get
urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应:
例如,对豆瓣的一个URLhttps://api.douban.com/v2/book/2129650
进行抓取,并返回响应:
from urllib import request
with request.urlopen(‘http://www.gliet.edu.cn/') as f:
data = f.read()
print(‘Status:’, f.status, f.reason)
for k, v in f.getheaders():
print(‘%s: %s’ % (k, v))
print(‘Data:’, data.decode(‘utf-8’))
可以看到HTTP响应的头和数据。
如果我们要想模拟浏览器发送GET请求,就需要使用Request对象,通过往Request对象添加HTTP头,我们就可以把请求伪装成浏览器。例如,模拟iPhone 6去请求豆瓣首页:
from urllib import request
req = request.Request('http://www.douban.com/')
req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')with request.urlopen(req) as f:
print('Status:', f.status, f.reason)
for k, v in f.getheaders():
print('%s: %s' % (k, v))
print('Data:', f.read().decode('utf-8'))
urllib更详细的用法可以参考:
https://www.liaoxuefeng.com/wiki/1016959663602400/1019223241745024
编程要求
根据提示,在右侧编辑器补充代码,对给定链接发送请求。请求成功时返回Status(状态码),失败时返回错误信息。
提示:使用以下格式可输出错误信息
try:
…
except Exception as e:
…
测试说明
平台会对你编写的代码进行测试:
测试输入:http://www.gliet.edu.cn/
预期输出:
Status: 200 OK
测试输入:一个错误的url,不能请求成功
预期输出:
<urlopen error [Errno -2] Name or service not known>
开始你的任务吧,祝你成功!
第2关:requests
任务描述
本关任务:使用python第三方库requests发起请求并返回状态码。
相关知识
Python内置的urllib模块,用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。
更好的方案是使用r