實驗環境準備html
騰訊雲所提供的的鏡像中已經包含了 Python 3.5python
大部分狀況咱們只須要單獨安裝 pip
便可json
sudo apt-get update sudo apt-get install python3 python3-pip -y
咱們使用 pip
軟件管理工具安裝 requests
,若是你須要其餘方法請訪問官方網站指導頁面。瀏覽器
請執行服務器
pip3 install requests
在瞭解爬蟲以前,咱們有必要了解 robots 協議。cookie
·--------------------------------------------------------網絡
*如下部份內容來自維基百科 robots.txt 詞條併發
robots.txt(統一小寫)是一種存放於網站根目錄下的 ASCII 編碼的文本文件,它一般告訴網絡搜索引擎的漫遊器(又稱網絡蜘蛛),此網站中的哪些內容是不該被搜索引擎的漫遊器獲取的,哪些是能夠被漫遊器獲取的。由於一些系統中的 URL 是大小寫敏感的,因此 robots.txt 的文件名應統一爲小寫。robots.txt 應放置於網站的根目錄下。若是想單獨定義搜索引擎的漫遊器訪問子目錄時的行爲,那麼能夠將自定的設置合併到根目錄下的 robots.txt,或者使用 robots 元數據(Metadata,又稱元數據)。app
這個協議也不是一個規範,而只是約定俗成的,有些搜索引擎會遵照這一規範,而其餘則否則。一般搜索引擎會識別這個元數據,不索引這個頁面,以及這個頁面的鏈出頁面。ide
·---------------------------------------------------
在使用爬蟲過程當中,咱們應儘量的遵循 robots 協議,在非學習交流與爲目的的場合嚴格遵循其規定。
同時,咱們在爬取數據的過程當中應該注重服務器負載,避免給服務器帶來較大壓力,不少小衆網站服務器工做能力並無咱們想象的那麼好,數個併發爬蟲就能使服務器宕機。
對於設計企業數據,網站全部者隱私的信息咱們應儘量避免爬取,換位思考,若是你是網站搭建者,你也不但願你的數據被輕鬆盜用吧。
cd ~ python3
當看到>>>
的輸入提示符時表示進入成功,請注意確認版本爲 3.X
版本
以後的一些內容都在Python命令行中完成
import requests
targetUrl = "http://www.baidu.com"
如今請跟隨示例完成,以後您能夠自行爬取其餘頁面
res = requests.get(targetUrl)
res.status_code
若是是200那麼咱們繼續,若是不是、、、額、、、再試一次?
res.encoding
你會發現獲得的結果是 ISO-8859-1
然而百度真的是這樣的嗎?
res.text
發現了什麼?中文亂碼,沒錯,很顯然百度用的不是 ISO-8859-1
的字符集
res.content
你以爲是什麼? utf-8
!沒錯,那麼讓咱們繼續
res.apparent_encoding
那麼咱們嘗試直接更改 res.encoding
一項
res.encoding = res.apparent_encoding
res.text
從簡單的例子開始
requests 庫提供的方法
requests.request(method, url, **kwargs)
**kwargs 的含義咱們暫且放一放
requests.get(url, params=None, **kwargs)
Response = requests.get(url)
Response 這裏是 requests 返回的一個對象,咱們以後會具體講解
requests.head(url, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.delete(url, **kwargs)
Response 返回類型的基本屬性
稍安勿躁
,在進行下一步實操以前,讓咱們再瞭解一下以前咱們涉及到的 Response 的部分基本屬性
HTML 返回的狀態碼,你能夠參考百度百科上的內容瞭解具體的含義
內容的字符串形式,簡而言之,就是網頁上的內容
從 HTTP header中得到響應內容編碼方式,若是在 header 裏沒有聲明,那麼將會是 ISO-8859-1
從內容中分析出的響應內容編碼方式,在執行過程當中會對各類編碼的機率進行計算,給出最可能的編碼類型,注意在程序中使用它會致使程序速度變慢。
html 內容的二進制顯示,對於圖片這樣的非文本文件,二進制的輸出是必要的
這是咱們上一個程序示例中沒有出現的內容,但它很重要
若是不是 200,產生異常
網絡傳輸存在着不肯定性,發現並及時處理異常很是重要
cd ~ python3
targetUrl = "https://cloud.tencent.com/dsadfas" res = requests.get(targetUrl) res.raise_for_status()
不出意外的話你就能看到 Python 的報錯信息
值得咱們注意的是這裏是產生中斷的報錯,而不是一個警告,經過 try...except...
咱們能夠實現對 http 請求錯誤的處理。
問題分析與處理
若是你對html請求熟悉,那麼必定知道 user-agent
這玩意兒,它標識了訪問者瀏覽器的類型,Python 很誠實的告訴網站服務器它是一個 Python 程序,然而若是咱們但願得到其中的內容就須要更改這個 user-agent
。
在以前基礎上這麼嘗試:
h = { "user-agent":"Mozilla/5.0 (MSIE 10.0; Windows NT 6.1; Trident/5.0)" } #這裏用的是IE的user-agent res = requests.get(url,headers = h) print(res.status_code)
小結
http 請求 headers 中包含的信息並不僅有 user-agent,不少網站都有反爬的基本策略,有的檢查 user-agent,相似於咱們以前看到的亞馬遜,有的網站會檢查 host,refer 等字段,這些內容是否須要肯定,如何更改相信有了以前的例子你已經懂了,關於更多這部分的內容不屬於本教程的範疇,請自行查閱相關資料。
headers 做爲參數傳遞給 requests 庫時,應該使用字典格式,把須要的內容放到字典中,剩下的 requests 會幫你解決。
更多參數
和以前出現過的 headers 相似,還有一些參數是咱們所須要的這裏給出簡要,具體使用請自行嘗試。
*以上內容來源網絡