Python爬蟲 requests庫應用詳解

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一下:

printdir(requests))

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)
  1. status_code:返回http狀態碼。具體狀態碼含義點擊鏈接查看。
  2. text/content:返回請求網站的源代碼和結果,比較推薦使用content,因爲text在顯示中文的時候,容易顯示亂碼,而content返回的數據格式其實是二進制格式,然後通過decode()轉換爲utf-8,這樣就解決了亂碼的問題.。
  3. 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')
  1. encoding:返回當前編碼。
    更改編碼的代碼:
r.encoding = "utf-8"
  1. request.headers:查看請求包的頭。
  2. headers:查看響應包的頭。
    修改頭的代碼:
headers = {'user-agent': 'my-aasdasdaspp/0.0.1', 'asd':'hello world!'}
  1. request.body:查看請求參數。
  2. cookies:查看cookies信息。
    修改cookies信息的代碼:
cookies = dict(cookies_are='working')
  1. (參數)timeout:設置超時。
    具體代碼:
r = requests.get(url, timeout=5)
r = requests.get(url, timeout=None)
  1. (方法)session:使用session。(進行關聯請求,自動添加cookies)session的具體原理點擊鏈接查看。
    具體代碼(注意conn):
conn = requests.session()
r = conn.get(url)
print r.request.headers
r = conn.get(url)
print r.request.headers
  1. 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()))
  1. (參數)file:文件操作,文件上傳。
    具體文件上傳的代碼:
files = {'file': open('cookie.txt', 'rb')}
response = requests.post("http://httpbin.org/post", files=files)
  1. 請求方法
  • 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: 請求服務器刪除指定的頁面。

完整相關代碼請點擊鏈接查看。

發佈了39 篇原創文章 · 獲贊 12 · 訪問量 7219
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章