40.項目案例之利用爬蟲技術獲取需要帳號密碼登錄的網頁中的數據


近期公司需要開發一個能夠讀取設備內部網頁信息,我想到了用爬蟲的方法來獲取相關數據,具體代碼如下:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import requests
import time


class GetData():
    # 初始化變量
    def __init__(self, url):
        self.url = url
        # 要用帳號密碼登錄,首先需要在先通過瀏覽器登錄網頁,然后在瀏覽器中查看Cookie值,將其放在請求頭中
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
            "Cookie": "user_choose=block"
        }
        self.login()    # 首先先用Session方法來登錄網頁
        self.get_data() # 登錄完成后,我們就可以去登錄里面其它的網址了

    # 登錄主頁,將Cookie寫入session對象中
    def login(self):
        self.session = requests.Session()
        response = self.session.get(self.url, headers=self.headers)

    # 用session對象的post來獲取Ajax接口數據
    def get_data(self):
        get_url = "http://192.168.1.12/boafrm/formCpReportMonitor"
        resp = self.session.post(get_url, headers=self.headers)
        text = resp.text
        return text


if __name__ == '__main__':
    while True:
        main_url = 'http://192.168.1.12/index/index.htm'
        data = GetData(main_url)
        print('-'*50)
        print(data.get_data())
        time.sleep(1)

要完成上面程序正常運行:

1.首先,我們需要用帳號密碼來完成正常的登錄操作,登錄完成后在瀏覽器中找到Cookie信息:

 

 2.然后,然后將該cookie信息放在程序的請求頭headers中:

 

 3.由於我們登錄的網站是用GET請求的,所以我們代碼中也需要用get請求,並且首次請求時,我們需要帶請求頭訪問,所以我們用requests.Session()中的get來訪問。

 

 4.最后,由於我發現需要獲取的數據是動態實時數據,所以是用了Ajax,那我就找那個利用Ajax技術的網址接口,我是這要查找的,用瀏覽器中的箭頭工具在網頁中查找對應的超鏈接文本,然后在下面的代碼中會定位到相應的代碼,在該代碼中就可以找到對應的網頁,然后打開該網頁,再按F12,在瀏覽器下面的工具中可以看到實時刷新的網址,此時,我們點擊最下面的一個,然后看右側的請求頭,

 

 

 

 按以上方法就能正確抓取到需要的數據了。

如有問題可以添加如下公眾號進行交流。


免責聲明!

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



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