爬取網頁其實就是透過URL取得網頁訊息,網頁訊息的實質是一段新增了JavaScript和CSS的HTML程式碼。 Python提供了一個抓取網頁資訊的第三方模組requests,requests模組自稱「HTTP for Humans」,直譯過來的意思是專門為人類而設計的HTTP模組,該模組支援發送請求,也支援獲取回應。
requests模組提供了許多發送HTTP請求的函數,常用的請求函數具體如表10-1所示。
表10-1 requests模組的請求函數
requests模組提供的Response 類別物件用於動態地回應客戶端的請求,控制發送給使用者的訊息,並且將動態地產生回應,包括狀態碼、網頁的內容等。接下來透過一張表格來列舉Response類別可以取得的信息,如表10-2所示。
表10-2 Response 類別的常用屬性
#接下來透過一個案例來示範如何使用requests模組抓取百度網頁,具體程式碼如下:
# 01 requests baidu import requests base_url = 'http://www.baidu.com' #发送GET请求 res = requests.get (base_url) print("响应状态码:{}".format(res.status_code))#获取响应状态码 print("编码方式:{}".format(res.encoding))#获取响应内容的编码方式 res.encoding = 'utf-8'#更新响应内容的编码方式为UIE-8 print("网页源代码:n{}".format(res.text)) #获取响应内容
以上程式碼中,第2行使用import導入了requests模組;第3~4行程式碼根據URL向伺服器發送了一個GET請求,並使用變數res接收伺服器傳回的回應內容;第5 ~6行程式碼列印了回應內容的狀態碼和編碼方式;第7行將回應內容的編碼方式變更為「utf-8」;第8行程式碼列印了回應內容。運行程序,程序的輸出結果如下:
响应状态码:200 编码方式:ISO-8859-1 网页源代码: <!DOCTYPE html> <!–-STATUS OK--><html> <head><meta http-equiv=content-type content=text/html; charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content= always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic. com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc>…省略N行…</body></html>
值得一提的是,使用requests模組爬取網頁時,可能會因為沒有連接網絡、伺服器連接失敗等原因導致產生各種異常,最常見的兩個異常是URLError和HTTPError,這些網路異常可以使用try…except 語句來擷取與處理。
以上是如何使用Requests模組抓取網頁?的詳細內容。更多資訊請關注PHP中文網其他相關文章!