真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python3如何實現(xiàn)模擬登錄和爬取-創(chuàng)新互聯(lián)

這篇文章主要講解了Python3如何實現(xiàn)模擬登錄和爬取,內(nèi)容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了清苑免費建站歡迎大家使用!

我們先以一個最簡單的實例來了解模擬登錄后頁面的抓取過程,其原理在于模擬登錄后 Cookies 的維護。

1. 本節(jié)目標

本節(jié)將講解以 GitHub 為例來實現(xiàn)模擬登錄的過程,同時爬取登錄后才可以訪問的頁面信息,如好友動態(tài)、個人信息等內(nèi)容。

我們應該都聽說過 GitHub,如果在我們在 Github 上關注了某些人,在登錄之后就會看到他們最近的動態(tài)信息,比如他們最近收藏了哪個 Repository,創(chuàng)建了哪個組織,推送了哪些代碼。但是退出登錄之后,我們就無法再看到這些信息。

如果希望爬取 GitHub 上所關注人的最近動態(tài),我們就需要模擬登錄 GitHub。

2. 環(huán)境準備

請確保已經(jīng)安裝好了 requests 和 lxml 庫,如沒有安裝可以參考第 1 章的安裝說明。

3. 分析登錄過程

首先要分析登錄的過程,需要探究后臺的登錄請求是怎樣發(fā)送的,登錄之后又有怎樣的處理過程。

如果已經(jīng)登錄 GitHub,先退出登錄,同時清除 Cookies。

打開 GitHub 的登錄頁面,鏈接為 https://github.com/login,輸入 GitHub 的用戶名和密碼,打開開發(fā)者工具,將 Preserve Log 選項勾選上,這表示顯示持續(xù)日志,如圖 10-1 所示。

Python3如何實現(xiàn)模擬登錄和爬取

點擊登錄按鈕,這時便會看到開發(fā)者工具下方顯示了各個請求過程,如圖 10-2 所示。

Python3如何實現(xiàn)模擬登錄和爬取

點擊第一個請求,進入其詳情頁面,如圖 10-3 所示。

Python3如何實現(xiàn)模擬登錄和爬取

可以看到請求的 URL 為 https://github.com/session,請求方式為 POST。再往下看,我們觀察到它的 Form Data 和 Headers 這兩部分內(nèi)容,如圖 10-4 所示。

Python3如何實現(xiàn)模擬登錄和爬取

Headers 里面包含了 Cookies、Host、Origin、Referer、User-Agent 等信息。Form Data 包含了 5 個字段,commit 是固定的字符串 Sign in,utf8 是一個勾選字符,authenticity_token 較長,其初步判斷是一個 Base64 加密的字符串,login 是登錄的用戶名,password 是登錄的密碼。

綜上所述,我們現(xiàn)在無法直接構造的內(nèi)容有 Cookies 和 authenticity_token。下面我們再來探尋一下這兩部分內(nèi)容如何獲取。

在登錄之前我們會訪問到一個登錄頁面,此頁面是通過 GET 形式訪問的。輸入用戶名密碼,點擊登錄按鈕,瀏覽器發(fā)送這兩部分信息,也就是說 Cookies 和 authenticity_token 一定是在訪問登錄頁的時候設置的。

這時再退出登錄,回到登錄頁,同時清空 Cookies,重新訪問登錄頁,截獲發(fā)生的請求,如圖 10-5 所示。

Python3如何實現(xiàn)模擬登錄和爬取

訪問登錄頁面的請求如圖所示,Response Headers 有一個 Set-Cookie 字段。這就是設置 Cookies 的過程。

另外,我們發(fā)現(xiàn) Response Headers 沒有和 authenticity_token 相關的信息,所以可能 authenticity_token 還隱藏在其他的地方或者是計算出來的。我們再從網(wǎng)頁的源碼探尋,搜索相關字段,發(fā)現(xiàn)源代碼里面隱藏著此信息,它是一個隱藏式表單元素,如圖 10-6 所示。

Python3如何實現(xiàn)模擬登錄和爬取

現(xiàn)在我們已經(jīng)獲取到所有信息,接下來實現(xiàn)模擬登錄。

4. 代碼實戰(zhàn)

首先我們定義一個 Login 類,初始化一些變量:

class Login(object):
    def __init__(self):
        self.headers = {
            'Referer': 'https://github.com/',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) 
            Chrome/57.0.2987.133 Safari/537.36',
            'Host': 'github.com'
        }
        self.login_url = 'https://github.com/login'
        self.post_url = 'https://github.com/session'
        self.logined_url = 'https://github.com/settings/profile'
        self.session = requests.Session()

當前名稱:Python3如何實現(xiàn)模擬登錄和爬取-創(chuàng)新互聯(lián)
標題URL:http://weahome.cn/article/dioghh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部