python爬蟲使用requests庫發(fā)送請求、處理Cookie和Session、設(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爬蟲,核心就是模擬瀏覽器行為,抓取網(wǎng)頁上的數(shù)據(jù)。requests庫,絕對是入門級的神器,用起來簡單粗暴,效率還高。
利用requests庫,我們可以輕松地向服務(wù)器發(fā)送http請求,拿到網(wǎng)頁的html源代碼,然后就可以用beautifulsoup或者XPath來解析提取數(shù)據(jù)了。
安裝requests庫很簡單,直接pip install requests就搞定了。
立即學(xué)習(xí)“Python免費(fèi)學(xué)習(xí)筆記(深入)”;
如何用requests發(fā)送GET和POST請求?
GET請求是最常用的,比如你想獲取某個網(wǎng)頁的內(nèi)容:
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地址。