1. 程式人生 > 其它 >爬蟲從入門到入獄(4)——requests與正則表示式

爬蟲從入門到入獄(4)——requests與正則表示式

宣告:為什麼沒有3?問就是稽核過不去,改了好幾遍都過不去。但是問題不大,3是一個階段案例,不影響之後的學習。

文章內容均出自《python爬蟲開發》
文章目錄
4.1 python第三方庫
4.1.1 第三方庫介紹
4.1.2 第三方庫安裝
4.1.3 requests的安裝
4.2 requests獲取網頁原始碼
4.2.1 GET方式
4.2.2 POST方法
4.3 requests與正則表示式的結合
4.1 python第三方庫
4.1.1 第三方庫介紹
在Python開發的過程中,常常需要將一些功能比較通用的程式碼抽離出來作為一個單獨的模組,從而被多個工程呼叫。這種公共的模組稱為Python的庫(Library,Lib)。Python在釋出時會自帶一些由官方開發的常用的庫,例如正則表示式“re”、時間“time”等。這些庫稱為“官方庫”。而由非官方釋出的庫,則稱為“第三方庫”。Python之所以如此強大,正是由於它擁有非常多的第三方庫。使用第三方庫,可以輕易實現各種各樣的功能。以獲取網頁內容為例,Python其實自帶了兩個模組,分別是urllib和urllib2。使用這兩個模組也可以獲取網頁內容。但是這兩個模組使用起來非常麻煩。而requests這個第三方庫,讓獲取網頁內容變得極其簡單。

4.1.2 第三方庫安裝
win+r —輸入cmd—pip install 庫名稱—回車

安裝完第三方庫以後,就可以在Python中使用了。使用第三方庫,就像使用Python自帶的庫一樣,首先需要使用“import”關鍵字將它匯入,然後才能使用。還有一點需要特別強調,開發者自己寫的.py檔案的名字絕對不能和Python自帶的模組或者已經安裝的第三方庫的名字相同,否則會產生問題。例如本章內容涉及requests和正則表示式,那麼讀者在測試程式碼的時候絕對不能自行建立名為“requests.py”或者“re.py”的檔案。一旦建立,程式碼必定報錯。

4.1.3 requests的安裝
pip install requests
1
4.2 requests獲取網頁原始碼
使用瀏覽器來訪問網頁,看起來只需要輸入網址就可以。但其實網頁有很多種開啟方式,最常見的是GET方式和POST方式。在瀏覽器裡面可以直接通過輸入網址訪問的頁面,就是使用了GET方式。還有一些頁面,只能通過從另一個頁面單擊某個連結或者某個按鈕以後跳過來,不能直接通過在瀏覽器輸入網址訪問,這種網頁就是使用了POST方式。

4.2.1 GET方式
對於使用GET方式的網頁,在Python裡面可以使用requests的get()方法獲取網頁的原始碼:

import requests
html = requests.get('網址')
html_bytes=html.content
html_str=html_bytes.decode()
1
2
3
4
在這4行程式碼中,第1行匯入了requests庫,這樣程式碼裡面才能使用。第2行使用GET方法獲取了網頁,得到一個Response物件。此時如果直接列印HTML變數,得到的是:
第3行使用.content這個屬性來顯示bytes型網頁的原始碼。第4行程式碼將bytes型的網頁原始碼解碼為字串型的原始碼。
對於上面的4行程式碼,可以將後3行合併,縮減為兩行程式碼:

import requests
html_str=requests.get('網址').content.decode()
1
2
之所以需要把bytes型的資料解碼為字串型的資料,是因為在bytes型的資料型別下,中文是無法正常顯示的。這個“解碼”對應的英文為“decode”,因而我們需要使用.decode()這個方法。這個方法的引數可以省略。在省略的時候,預設使用UTF-8編碼格式來把bytes型解碼為字串型的原始碼。可能有一些中文網頁,它的編碼格式本身不是UTF-8,這就需要在括號裡面寫明目標編碼格式的名字。

4.2.2 POST方法
網頁的訪問方式除了GET方式以外,還有POST方式。有一些網頁,使用GET和POST方式訪問同樣的網址,得到的結果是不一樣的。還有另外一些網頁,只能使用POST方式訪問,如果使用GET方式訪問,網站會直接返回錯誤資訊。

import requests
data={'key1':'value2','key2':'value2'}
html_data=requests.post('網址',data=data).content.decode()

1
2
3
4
data這個字典的內容和項數需要根據實際情況修改,Key和Value在不同的網站是不一樣的。而做爬蟲,構造這個字典是任務之一。

還有一些網址,提交的內容需要是JSON格式的,因此post()方法的引數需要進行一些修改:

html_json=requests.post('網址',json=data).content.decode()
1
這樣寫程式碼,requests可以自動將字典轉換為JSON字串,關於JSON格式,後面的章節將會有詳細介紹。

4.3 requests與正則表示式的結合
只需要將得到的網址原始碼賦給正則表示式的第二個引數即可。
————————————————
版權宣告:本文為CSDN博主「流鼻涕不用抽紙」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/weixin_55159605/article/details/124134277