近期公司需要開發一個能夠讀取設備內部網頁信息,我想到了用爬蟲的方法來獲取相關數據,具體代碼如下:
#!/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,在瀏覽器下面的工具中可以看到實時刷新的網址,此時,我們點擊最下面的一個,然后看右側的請求頭,
按以上方法就能正確抓取到需要的數據了。
如有問題可以添加如下公眾號進行交流。