这篇是基础应用的最後一篇,主要补充讲解几个基本功能。
当我们在爬虫拿到 Response 时,通常为了要确保内容正确,都会检查 HTTP Status,如果不是 200 的话,就得要做一些例外处理,传统的做法会像是:
import requests
r = requests.get("https://www.example.com")
# 方法1
if r.status_code != 200:
# do something here
# 方法2
if r.status_code != requests.codes.ok:
# do something here
Requests 有提供更方便的做法:
import requests
r = requests.get("https://www.example.com")
# 如果 status != 200 就会 throw exception
r.raise_for_status()
使用 raise_for_status() 的话,程序就会 raise 一个 requests.exceptions.HTTPError,让使用者可以更好的集中处理这些 errors。
以下是官方范例:
>>> bad_r = requests.get("https://httpbin.org/status/404")
>>> bad_r.status_code
404
>>> bad_r.raise_for_status()
Traceback (most recent call last):
File "requests/models.py", line 832, in raise_for_status
raise http_error
requests.exceptions.HTTPError: 404 Client Error
当然,爬虫时万一遇到网路状况,我们总不可能让程序继续在那边一直 retry 直到系统 timeout 而浪费频宽,因此 Requests 套件有提供自定义 timeout 的方式,让爬虫程序写起来更有弹性。
import requests
r = requests.get("https://www.example.com", timeout=1)
# 如果 timeout 就会 throw exception
timeout 的话,程序就会 raise 一个 requests.exceptions.Timeout。
以下是官方范例:
>>> requests.get("https://github.com/", timeout=0.001)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)
以上就是 Requests 套件的基本应用解说!
到目前为止,基本上可以应付大部分情况了,接下来的篇章将要进入实作篇罗!
另外这是 Requests 的 Interface 文件,如果读者有时间的话可以稍微看一下。可以更清楚知道怎麽使用套件内的功能。
<<: Android Studio初学笔记-Day20-AlertDialog(1)
>>: Day26条件运算式if... else(JavaScript)
TabLayout提供了一个水平的布局方式显示,TabItem是TabLayout显示的物件。 de...
在前几天的 App Engine 与 K8S 中,或许我已经大致的提过 Micro Services...
今天来认识一下SELECT INTO吧!SELECT INTO用来从某资料表查询所得之资料集结果新增...
介绍 这是 Obsidian 使用教学 — 应用篇的第 4 篇文章。 在 上一篇文章 中我介绍了 B...
今天使用的toolkit是Keras,使用的资料集是MNIST的data,而Keras提供了自动下载...