Python爬蟲入門:requests庫使用

python爬蟲使用requests庫發(fā)送請求、處理CookieSession、設(shè)置headers、處理異常及使用代理ip。1. 發(fā)送get請求用requests.get(url)獲取網(wǎng)頁內(nèi)容;2. post請求通過requests.post(url, data=data)提交數(shù)據(jù);3. 創(chuàng)建session對象自動管理cookie實(shí)現(xiàn)登錄訪問;4. 通過headers參數(shù)模擬瀏覽器標(biāo)識防止被識別為爬蟲;5. 使用timeout設(shè)置超時并結(jié)合try-except捕獲異常;6. 利用proxies參數(shù)配置代理ip防止ip被封。

Python爬蟲入門:requests庫使用

python爬蟲,核心就是模擬瀏覽器行為,抓取網(wǎng)頁上的數(shù)據(jù)。requests庫,絕對是入門級的神器,用起來簡單粗暴,效率還高。

Python爬蟲入門:requests庫使用

利用requests庫,我們可以輕松地向服務(wù)器發(fā)送http請求,拿到網(wǎng)頁的html源代碼,然后就可以用beautifulsoup或者XPath來解析提取數(shù)據(jù)了。

Python爬蟲入門:requests庫使用

安裝requests庫很簡單,直接pip install requests就搞定了。

立即學(xué)習(xí)Python免費(fèi)學(xué)習(xí)筆記(深入)”;

如何用requests發(fā)送GET和POST請求?

GET請求是最常用的,比如你想獲取某個網(wǎng)頁的內(nèi)容:

Python爬蟲入門:requests庫使用

import requests  url = 'https://www.example.com' response = requests.get(url)  if response.status_code == 200:     print(response.text) else:     print(f"請求失敗,狀態(tài)碼:{response.status_code}")

POST請求一般用于提交數(shù)據(jù),比如登錄:

import requests  url = 'https://www.example.com/login' data = {'username': 'your_username', 'password': 'your_password'} response = requests.post(url, data=data)  if response.status_code == 200:     print(response.text) else:     print(f"請求失敗,狀態(tài)碼:{response.status_code}")

注意,response.status_code是HTTP狀態(tài)碼,200表示請求成功。response.text是網(wǎng)頁的HTML源代碼。

如何處理requests中的Cookie和Session?

有些網(wǎng)站需要登錄才能訪問,這就涉及到Cookie和Session。requests庫可以自動處理Cookie,你只需要創(chuàng)建一個Session對象:

import requests  session = requests.Session()  # 先登錄 url_login = 'https://www.example.com/login' data_login = {'username': 'your_username', 'password': 'your_password'} response_login = session.post(url_login, data=data_login)  # 登錄后訪問需要權(quán)限的頁面 url_protected = 'https://www.example.com/protected' response_protected = session.get(url_protected)  if response_protected.status_code == 200:     print(response_protected.text) else:     print(f"請求失敗,狀態(tài)碼:{response_protected.status_code}")

Session對象會自動保存Cookie,下次請求會自動帶上。

requests庫如何設(shè)置請求頭(Headers)?

有些網(wǎng)站會檢查請求頭,防止爬蟲。我們可以通過設(shè)置Headers來模擬瀏覽器:

import requests  url = 'https://www.example.com' headers = {     'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(url, headers=headers)  if response.status_code == 200:     print(response.text) else:     print(f"請求失敗,狀態(tài)碼:{response.status_code}")

User-Agent是瀏覽器標(biāo)識,可以從瀏覽器開發(fā)者工具中找到。

requests庫如何處理超時和異常?

網(wǎng)絡(luò)請求可能會超時或者出現(xiàn)其他異常,我們需要處理這些情況:

import requests  url = 'https://www.example.com'  try:     response = requests.get(url, timeout=5)  # 設(shè)置超時時間為5秒     response.raise_for_status()  # 檢查HTTP狀態(tài)碼,如果不是200,拋出異常     print(response.text) except requests.exceptions.RequestException as e:     print(f"請求出錯:{e}")

timeout參數(shù)設(shè)置超時時間。response.raise_for_status()會檢查HTTP狀態(tài)碼,如果不是200,會拋出異常。

如何使用代理IP防止被封?

頻繁的爬取可能會被網(wǎng)站封IP,使用代理IP可以解決這個問題:

import requests  url = 'https://www.example.com' proxies = {     'http': 'http://10.10.1.10:3128',     'https': 'http://10.10.1.10:1080', } try:     response = requests.get(url, proxies=proxies, timeout=5)     response.raise_for_status()     print(response.text) except requests.exceptions.RequestException as e:     print(f"請求出錯:{e}") 

你需要替換http://10.10.1.10:3128和http://10.10.1.10:1080為你的代理IP地址。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享