如何用 Python 爬取需要登入的網站?,python登入

來源:互聯網
上載者:User

如何用 Python 爬取需要登入的網站?,python登入

(點擊上方藍字,快速關注我們)


英文:Tzahi Vidas   編譯: 伯樂線上 -   ebigear  

http://python.jobbole.com/83588/


最近我必須執行一項從一個需要登入的網站上爬取一些網頁的操作。它沒有我想象中那麼簡單,因此我決定為它寫一個輔助教程。

在本教程中,我們將從我們的bitbucket賬戶中爬取一個項目列表。

教程中的代碼可以從我的 Github 中找到。

我們將會按照以下步驟進行:

  1. 提取登入需要的詳細資料

  2. 執行網站登入

  3. 爬取所需要的資料


在本教程中,我使用了以下包(可以在 requirements.txt 中找到):

requests

lxml

步驟一:研究該網站開啟登入頁面

 進入以下頁面  “bitbucket.org/account/signin”。你會看到如所示的頁面(執行登出,以防你已經登入)

仔細研究那些我們需要提取的詳細資料,以供登入之用

在這一部分,我們會建立一個字典來儲存執行登入的詳細資料:

1. 右擊 “Username or email” 欄位,選擇“查看元素”。我們將使用 “name” 屬性為 “username” 的輸入框的值。“username”將會是 key 值,我們的使用者名稱/電子郵箱就是對應的 value 值(在其他的網站上這些 key 值可能是 “email”,“ user_name”,“ login”,等等)。


2. 右擊 “Password” 欄位,選擇“查看元素”。在指令碼中我們需要使用 “name” 屬性為 “password” 的輸入框的值。“password” 將是字典的 key  值,我們輸入的密碼將是對應的 value 值(在其他網站key值可能是 “userpassword”,“loginpassword”,“pwd”,等等)。


3. 在原始碼頁面中,尋找一個名為 “csrfmiddlewaretoken” 的隱藏輸入標籤。“csrfmiddlewaretoken” 將是 key 值,而對應的 value 值將是這個隱藏的輸入值(在其他網站上這個 value 值可能是一個名為 “csrftoken”,“ authenticationtoken” 的隱藏輸入值)。列如:“Vy00PE3Ra6aISwKBrPn72SFml00IcUV8”。


最後我們將會得到一個類似這樣的字典:


payload = {

    "username": "<USER NAME>",

    "password": "<PASSWORD>",

    "csrfmiddlewaretoken": "<CSRF_TOKEN>"

}


請記住,這是這個網站的一個具體案例。雖然這個登入表單很簡單,但其他網站可能需要我們檢查瀏覽器的請求日誌,並找到登入步驟中應該使用的相關的 key 值和 value 值。

步驟2:執行登入網站

對於這個指令碼,我們只需要匯入如下內容:

import requests

from lxml import html


首先,我們要建立 session 對象。這個對象會允許我們儲存所有的登入工作階段請求。


session_requests = requests.session()


第二,我們要從該網頁上提取在登入時所使用的 csrf 標記。在這個例子中,我們使用的是 lxml 和 xpath 來提取,我們也可以使用Regex或者其他的一些方法來提取這些資料。


login_url = "https://bitbucket.org/account/signin/?next=/"

result = session_requests.get(login_url)

 

tree = html.fromstring(result.text)

authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]


**

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.