python爬蟲19 | 遇到需要的登錄的網站怎么辦?用這3招輕松搞定!


 

你好

 

由於你是游客

 

無法查看本文

 

請你登錄再進

 

謝謝合作

 

 

當你在爬某些網站的時候

 

需要你登錄才可以獲取數據

 

咋整?

 

莫慌

 

小帥b把這幾招傳授給你

 

讓你以后從容應對

 

 

那么

 

接下來就是

 

學習 python 的正確姿勢

 

 

登錄的常見方法無非是這兩種

 

1、讓你輸入帳號和密碼登錄

 

 

2、讓你輸入帳號密碼+驗證碼登錄

 

 

今天

 

小帥b先跟你說說第一種

 

需要驗證碼的咱們下一篇再講

 

第一招

 

 

Cookie大法

 

你平常在上某個不為人知的網站的時候

 

是不是發現你只要登錄一次

 

就可以一直看到你想要的內容

 

過了一陣子才需要再次登錄

 

這就是因為 Cookie 在做怪

 

簡單來說

 

就是每一個使用這個網站的人

 

服務器都會給他一個 Cookie

 

那么下次你再請求數據的時候

 

你順帶把這個 Cookie 傳過去

 

服務器一看

 

誒,小伙子是老客戶啊

 

 

有登錄過

 

直接返回數據給他吧

 

在服務中還可以設置 Cookie 的有效時間

 

也就是說

 

當你下次攜帶一個過期了的 Cookie 給服務器的時候

 

服務器雖然知道你是老客戶

 

但是還是需要你重新再登錄一次

 

然后再給你一個有效的 Cookie

 

Cookie 的時長周期是服務器那邊定的

 

ok

 

了解了這一點之后

 

我們就來玩一下吧

 

我們以「逼乎」為例

 

https://biihu.cc/account/login/

 

輸入地址之后

 

按一下 F12

 

點擊 network 標簽

 

然后登錄你的帳號

 

然后點擊其中一個

 

你就可以看到在 Request Headers 有你的 Cookie

 

 

 

有了 Cookie 之后

 

我們在代碼中直接獲取我的個人信息

 

import requests
headers = {    # 假裝自己是瀏覽器 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.75 Chrome/73.0.3683.75 Safari/537.36', # 把你剛剛拿到的Cookie塞進來 'Cookie': 'eda38d470a662ef3606390ac3b84b86f9; Hm_lvt_f1d3b035c559e31c390733e79e080736=1553503899; biihu__user_login=omvZVatKKSlcXbJGmXXew9BmqediJ4lzNoYGzLQjTR%2Fjw1wOz3o4lIacanmcNncX1PsRne5tXpE9r1sqrkdhAYQrugGVfaBICYp8BAQ7yBKnMpAwicq7pZgQ2pg38ZzFyEZVUvOvFHYj3cChZFEWqQ%3D%3D; Hm_lpvt_f1d3b035c559e31c390733e79e080736=1553505597',}
session = requests.Session()response = session.get('https://biihu.cc/people/wistbean%E7%9C%9F%E7%89%B9%E4%B9%88%E5%B8%85', headers=headers)
print(response.text)

 

運行后可以發現不用登錄就可以直接拿到自己的個人信息了

 

<!DOCTYPE html><html><head><meta content="text/html;charset=utf-8" http-equiv="Content-Type" /><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport" /><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" /><meta name="renderer" content="webkit" /><title>小帥b真特么帥 的個人主頁 - 逼乎</title><meta name="keywords" content="逼乎,問答,裝逼,逼乎網站" /><meta name="description" content="逼乎 ,與世界分享你的裝逼技巧與見解" /><base href="https://biihu.cc/" /><!--[if IE]></base><![endif]--><link rel="stylesheet" type="text/css" href="https://biihu.cc/static/css/bootstrap.css" /><link rel="stylesheet" type="text/css" href="https://biihu.cc/static/css/icon.css" /><link href="https://biihu.cc/static/css/default/common.css?v=20180831" rel="stylesheet" type="text/css" /><link href="https://biihu.cc/static/css/default/link.css?v=20180831" rel="stylesheet" type="text/css" /><link href="https://biihu.cc/static/js/plug_module/style.css?v=20180831" rel="stylesheet" type="text/css" /><link href="https://biihu.cc/static/css/default/user.css?v=20180831" rel="stylesheet" type="text/css" /><link href="https://biihu.cc/static/css/mood/mood.css" rel="stylesheet" type="text/css" /><script type="text/javascript"> var _02AEC94D5CA08B39FC0E1F7CC220F9B4="a5359326797de302bfc9aa6302c001b8"; var G_POST_HASH=_02AEC94D5CA08B39FC0E1F7CC220F9B4; var G_INDEX_SCRIPT = ""; var G_SITE_NAME = "逼乎"; var G_BASE_URL = "https://biihu.cc"; var G_STATIC_URL = "https://biihu.cc/static"; var G_UPLOAD_URL = "/uploads"; var G_USER_ID = "188";  var G_USER_NAME = "小帥b真特么帥"; var G_UPLOAD_ENABLE = "Y"; var G_UNREAD_NOTIFICATION = 0; var G_NOTIFICATION_INTERVAL = 100000; var G_CAN_CREATE_TOPIC = "1"; var G_ADVANCED_EDITOR_ENABLE = "Y"; var FILE_TYPES = "jpg,jpeg,png,gif,zip,doc,docx,rar,pdf,psd";</script><script src="https://biihu.cc/static/js/jquery.2.js?v=20180831" type="text/javascript"></script>
....

 

 

第二招

 

 

表單請求大法

 

很簡單

 

就是通過抓包

 

獲取請求登錄的時候需要用到的用戶名密碼參數

 

然后以表單的形式請求服務器

 

如果你細心一點的話應該會知道之前說過拉

 

具體在這

去看下

我就不多說了

 

python爬蟲03:那個叫做 Urllib 的庫讓我們的 python 假裝是瀏覽器

 

 

第三招

 

 

Selenium 自動登錄法

 

你應該看過這兩個

 

python爬蟲09 | 上來,自己動 !這就是 selenium 的牛逼之處

python爬蟲11 | 這次,將帶你爬取b站上的NBA形象大使蔡徐坤和他的球友們

 

看過的話

 

那么對於你來說

 

Selenium 自動登錄也太 tm 簡單了吧

 

獲取到兩個輸入框的元素

 

再獲取到登錄按鈕

 

往輸入框寫你的帳號密碼

 

然后自動點擊一下登錄

 

username = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "帳號的selector")))password = WAIT.until(EC.presence_of_element_located((By.CSS_SELECTOR, "密碼的selector")))submit = WAIT.until(EC.element_to_be_clickable((By.XPATH, '按鈕的xpath')))
username.send_keys('你的帳號')password.send_keys('你的密碼')submit.click()

 

登錄完之后拿到 Cookie

 

cookies = webdriver.get_cookies()

 

有了 Cookie 你就可以拿到你想要的數據了

 

ok

 

以上這三招

 

 

希望對你有幫助

 

咱們下一篇說說驗證碼相關

 

下回見

 

peace

 

 

帥b老仙

法力無邊

 

(你想我么?)

 

 

點個在看

繼續發力


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM