?最近有個項目需要做視覺自動化處理的工具,最后選用的軟件為python,剛好這個機會進行系統學習。短時間學習,需要快速開發,所以記錄要點步驟,防止忘記。
?
?鏈接:
開源 python 應用 開發(一)python、pip、pyAutogui、python opencv安裝-CSDN博客
開源 python 應用 開發(二)基于pyautogui、open cv 視覺識別的工具自動化-CSDN博客
開源 python 應用 開發(三)python語法介紹-CSDN博客
開源 python 應用 開發(四)python文件和系統綜合應用-CSDN博客
開源 python 應用 開發(五)python opencv之目標檢測-CSDN博客
開源 python 應用 開發(六)網絡爬蟲-CSDN博客
開源 python 應用 開發(七)數據可視化-CSDN博客
?推薦鏈接:
開源 Arkts 鴻蒙應用 開發(一)工程文件分析-CSDN博客
開源 Arkts 鴻蒙應用 開發(二)封裝庫.har制作和應用-CSDN博客
開源 Arkts 鴻蒙應用 開發(三)Arkts的介紹-CSDN博客
開源 Arkts 鴻蒙應用 開發(四)布局和常用控件-CSDN博客
開源 Arkts 鴻蒙應用 開發(五)控件組成和復雜控件-CSDN博客
?推薦鏈接:
開源 java android app 開發(一)開發環境的搭建-CSDN博客
開源 java android app 開發(二)工程文件結構-CSDN博客
開源 java android app 開發(三)GUI界面布局和常用組件-CSDN博客
開源 java android app 開發(四)GUI界面重要組件-CSDN博客
開源 java android app 開發(五)文件和數據庫存儲-CSDN博客
開源 java android app 開發(六)多媒體使用-CSDN博客
開源 java android app 開發(七)通訊之Tcp和Http-CSDN博客
開源 java android app 開發(八)通訊之Mqtt和Ble-CSDN博客
開源 java android app 開發(九)后臺之線程和服務-CSDN博客
開源 java android app 開發(十)廣播機制-CSDN博客
開源 java android app 開發(十一)調試、發布-CSDN博客
開源 java android app 開發(十二)封庫.aar-CSDN博客
推薦鏈接:
開源C# .net mvc 開發(一)WEB搭建_c#部署web程序-CSDN博客
開源 C# .net mvc 開發(二)網站快速搭建_c#網站開發-CSDN博客
開源 C# .net mvc 開發(三)WEB內外網訪問(VS發布、IIS配置網站、花生殼外網穿刺訪問)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客
開源 C# .net mvc 開發(四)工程結構、頁面提交以及顯示_c#工程結構-CSDN博客
開源 C# .net mvc 開發(五)常用代碼快速開發_c# mvc開發-CSDN博客
本章節內容如下:實現了一個網站登錄和頁面抓取的功能,主要使用了?requests 和beautifulsoup4 ?庫。
一、引用庫的安裝
首先安裝requests 和beautifulsoup4 庫
cmd命令行安裝requests
pip install requests -i https://mirrors.aliyun.com/pypi/simple/
cmd命令行安裝beautifulsoup4?
pip install beautifulsoup4 -i https://mirrors.aliyun.com/pypi/simple/
用vscode終端安裝效果如下,cmd安裝效果和這個類似
?
二、爬蟲代碼解析
2.1? 源碼
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoinclass WebsiteLogin:def __init__(self, base_url):self.base_url = base_urlself.session = requests.Session()self.session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'})def find_hidden_inputs(self, html):"""查找表單中的隱藏字段"""soup = BeautifulSoup(html, 'html.parser')hidden_inputs = {}for input_tag in soup.find_all('input', type='hidden'):hidden_inputs[input_tag.get('name')] = input_tag.get('value', '')return hidden_inputsdef login(self, login_url, username, password, extra_data=None):"""登錄網站"""# 獲取登錄頁面try:login_page = self.session.get(urljoin(self.base_url, login_url))login_page.raise_for_status()except requests.RequestException as e:print(f"訪問登錄頁面失敗: {e}")return False# 獲取隱藏字段hidden_inputs = self.find_hidden_inputs(login_page.text)# 準備登錄數據login_data = {'inputName': username,'inputPwd': password,**hidden_inputs}# 添加額外的表單數據if extra_data:login_data.update(extra_data)# 提交登錄表單try:response = self.session.post(urljoin(self.base_url, login_url),data=login_data,headers={'Referer': urljoin(self.base_url, login_url)})response.raise_for_status()except requests.RequestException as e:print(f"提交登錄表單失敗: {e}")return False# 驗證登錄是否成功(根據實際網站調整)#if 'logout' not in response.text.lower() and 'sign out' not in response.text.lower():# print("登錄失敗,請檢查憑據")# return Falseif 'login' in response.url.lower():return Falseprint("登錄成功!")return Truedef get_page(self, page_url):"""獲取指定頁面的內容"""try:response = self.session.get(urljoin(self.base_url, page_url))response.raise_for_status()return response.textexcept requests.RequestException as e:print(f"獲取頁面失敗: {e}")return None# 使用示例
if __name__ == "__main__":# 配置信息config = {'base_url': 'http://xxx.com','login_url': '','username': 'xxx','password': 'xxx','target_page': '/xxx/xxx'}# 創建登錄實例web_login = WebsiteLogin(config['base_url'])# 嘗試登錄if web_login.login(config['login_url'], config['username'], config['password']):# 登錄成功后獲取目標頁面target_content = web_login.get_page(config['target_page'])if target_content:print(f"成功獲取目標頁面內容,長度: {len(target_content)}")# 保存內容with open('target_page.html', 'w', encoding='utf-8') as f:f.write(target_content)else:print("未能獲取目標頁面內容")else:print("登錄失敗,程序終止")
2.2? 核心參數,主要有config配置信息,信息有web登錄頁面鏈接地址,目標跳轉頁面鏈接地址,用戶名,用戶密碼。
config參數如下圖
?
2.3? login_data數據,數據里有登錄的字段,包含提交頁面的用戶名的字段,密碼字段。
login_data數據如下圖
?
2.4? requests.Session()會自動管理 Cookies,無需手動處理登錄后的會話狀態。
requests.Session如下圖
2.5? 登錄成功則將跳轉頁面保存為target_page.html
代碼位置如下
三.運行效果
3.1? 登錄成功后,跳轉到指定頁面,把指定頁面保存為target_page.html文件。
運行效果圖
?