Python爬蟲(一)
學習Python爬蟲過程中的心得體會以及知識點的整理,方便我自己查找,也希望可以和大家一起交流。
—— requests庫應用詳解 ——
一.安裝requests庫
可以直接使用pip安裝,如果電腦上沒安裝pip,可以到以下網址教程中安裝。
Linux:安裝教程。
Windows:安裝教程。
MAC OS:直接在終端輸入代碼:sudo easy_install pip
。
安裝好pip後,我們就可以安裝requests庫了。
直接輸入代碼:pip install requests
。
二.導入requests庫
我們首先在Python中導入requests庫:
import requests
對於新手來說,我們需要知道requests庫有什麼功能方法,我們可以dir一下:
print (dir(requests))
在這裏我們可以看到requests庫的各種方法。
接下來我們就使用幾種。
import requests
url="http://www.baidu.com"
r=requests.get(url)
這裏使用的是requests庫的get方法,相當於我們在瀏覽器裏輸入“http://www.baidu.com”這個網址所能獲得的的信息。
三.requests庫的代理功能
requests庫支持代理,支持兩種協議,http和https。
proxies = {
"http":"http://127.0.0.1:8080",
"https":"http://127.0.0.1:8080" ,
}
我是直接在本地的8080端口進行測試,並且可以利用burpsuite在8080端口進行監聽。
若需要輸入賬戶密碼,則可以:
proxies = {
"http": "http://user:[email protected]:3128/",
}
當進行代理的時候,需要修改原本的代碼:
import requests
url="http://www.baidu.com"
proxies = {
"http":"http://127.0.0.1:8080",
"https":"http://127.0.0.1:8080" ,
}
r=requests.get(url,proxies = proxies,verify = false)
這裏我們在get方法中添加了參數,proxies參數和verify參數,如果使用的是https認證而本地證書又沒有認證,那麼需要將verify參數設置爲false。當然,如果不進行修改verify,那麼代碼指令依然可以運行,但是會報錯。
四.requests庫的方法
import requests
url="http://www.baidu.com"
r=requests.get(url)
print(r)
print(r.status_code)
print(r.text)
print(r.content)
print(r.history)
print(r.request.headers)
print(r.headers)
print(r.request.body)
- status_code:返回http狀態碼。具體狀態碼含義點擊鏈接查看。
- text/content:返回請求網站的源代碼和結果,比較推薦使用content,因爲text在顯示中文的時候,容易顯示亂碼,而content返回的數據格式其實是二進制格式,然後通過decode()轉換爲utf-8,這樣就解決了亂碼的問題.。
- history:當請求地網站進行跳轉的時候,顯示跳轉信息,比如跳轉次數。若使用content,會顯示跳轉後的網頁的源碼或信息。
如果不想使網頁進行跳轉,那麼可以直接加入參數:
r=requests.get(url,allow_redirects=False)
allow_redirects參數是詢問是否自動跳轉。
4. sys.setdefaultencoding:由於linux和windows的基礎設置有一些不同,所以有時候需要更改一些設置,比如編碼,是爲了防止亂碼。這個過程需要引入sys,更改系統設置。完整代碼如下:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
- encoding:返回當前編碼。
更改編碼的代碼:
r.encoding = "utf-8"
- request.headers:查看請求包的頭。
- headers:查看響應包的頭。
修改頭的代碼:
headers = {'user-agent': 'my-aasdasdaspp/0.0.1', 'asd':'hello world!'}
- request.body:查看請求參數。
- cookies:查看cookies信息。
修改cookies信息的代碼:
cookies = dict(cookies_are='working')
- (參數)timeout:設置超時。
具體代碼:
r = requests.get(url, timeout=5)
r = requests.get(url, timeout=None)
- (方法)session:使用session。(進行關聯請求,自動添加cookies)session的具體原理點擊鏈接查看。
具體代碼(注意conn):
conn = requests.session()
r = conn.get(url)
print r.request.headers
r = conn.get(url)
print r.request.headers
- json:將返回值以json的形式展示。json庫的具體介紹點擊鏈接查看。
具體代碼:
import requests
import json
r = requests.get("http://www.baidu.com/get")
print(type(r.text))
print(r.json())
print(json.loads(r.text))
print(type(r.json()))
- (參數)file:文件操作,文件上傳。
具體文件上傳的代碼:
files = {'file': open('cookie.txt', 'rb')}
response = requests.post("http://httpbin.org/post", files=files)
- 請求方法
- GET: 請求指定的頁面信息,並返回實體主體。GET請求將提交的數據放置在HTTP請求協議頭中。
進行get請求的代碼:
url="http://www.baidu.com"
r=requests.get(url)
- HEAD: 只請求頁面的首部。
- POST: 請求服務器接受所指定的文檔作爲對所標識的URI的新的從屬實體。POST提交的數據則放在實體數據中。
發送post請求的代碼:
payload = {'name': 'loop', 'age': '12'}
r = requests.post("http://httpbin.org/post", data=payload)
- PUT: 從客戶端向服務器傳送的數據取代指定的文檔的內容。
- DELETE: 請求服務器刪除指定的頁面。
完整相關代碼請點擊鏈接查看。