python爬蟲5:requests庫-案例3
前言
? python實現網絡爬蟲非常簡單,只需要掌握一定的基礎知識和一定的庫使用技巧即可。本系列目標旨在梳理相關知識點,方便以后復習。
申明
? 本系列所涉及的代碼僅用于個人研究與討論,并不會對網站產生不好影響。
目錄結構
文章目錄
- python爬蟲5:requests庫-案例3
- 1. 目標
- 2. 詳細流程
- 2.1 代理池的構建
- 2.2 目標確定
- 2.3 真實url確定
- 2.4 代碼
- 3. 總結
1. 目標
? 本次案例的主要目標是幫助大家熟悉requests庫中的會話維持技巧、代理構建等技巧。
? 再次說明,案例本身并不重要,重要的是如何去使用和分析,另外為了避免侵權之類的問題,我不會放涉及到網站的圖片,希望能理解。
2. 詳細流程
2.1 代理池的構建
? 代理池的作用之前已經講過了,但是如何構建代理池呢?一般來說都是將那些可以使用的代理IP放入數據庫中,后面寫爬蟲程序的時候再調用,因為代理池是可以一直使用的工具。
? 我之前寫過一個腳本,就是利用一個爬蟲專門去爬免費代理網站的代理IP,然后再寫個爬蟲去爬取目標網站。不過這里,我們就簡單來,把一些可用的代理IP放入一個字典中即可。
2.2 目標確定
? 這次我換了一個小網站,具體地址我就不放了。
? 首先,利用上一篇的知識,虛假登錄獲取data參數值,結果如下:
? 可以發現的是,參數構建如下:
data = {'action' : 'user_login','username' : 賬號,'password' : 密碼,'rememberme' : 1
}
2.3 真實url確定
? 在上一講由于沒能實際運行代碼,所以忘記講述這一點了。
? 就是我們登錄頁面的url有時候并不是我們在網頁上看到的url,比如這個案例中,我在網頁上看到的登錄網址為:
xxxxxx_login.html
? 但是,實際上,我通過上面的POST頁面,發現真實的網址其實是一個名為xxxxx.php
頁面,所以大家一定要以抓取的POST頁面信息為準,才可以快準狠地登錄成功。
2.4 代碼
? 有了上面的思路,代碼就很簡單了:
import requests
import time
# 網址
login_url = '真實登錄網址'
home_url = '個人用戶頁面網址'
# 參數
username = input('請輸入賬號:')
password = input('請輸入密碼:')
data = {'action': 'user_login','username': username,'password': password,'rememberme': '1'
}
# header參數
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
}
# 代理池
proxies = {'http' :'http://ip:端口',xxxxx
}
# 請求
session = requests.session()
# 登錄
session.post(login_url,headers=headers,data=data,proxies=proxies)
time.sleep(6)
# 訪問個人主頁
response = session.get(home_url,headers=headers)
# 查看結果
print(response.status_code)
# 把個人用戶界面網頁拷貝下來證明登錄成功
with open('home.html','w',encoding='utf-8') as f:f.write(response.content.decode('utf-8'))
? 這里又補充一個知識點,就是你可以把網頁源碼保存到本地,以html后綴格式存儲,然后可以用瀏覽器打開,這樣可以直觀看到爬取的結果。
? 此時,我這里的結果如下:
3. 總結
? 到這篇文章為止,requests庫就講解完畢了,這里我簡單總結一下寫請求代碼時最需要注意的點:
- headers參數不能忘記,現在網站最基本的都會排查headers參數
- 寫登錄爬蟲時,一定要去通過瀏覽器提供的后臺工具,結合我上篇和這篇的知識點,去抓取真實提交的POST頁面,找到參數和真實url
? 下一篇,開始講解解析庫的內容。