python爬取robomaster論壇文章數據,攜帶登錄信息

一. 內容簡介

python爬取robomaster論壇文章數據。

二. 軟件環境

2.1vsCode

2.2Anaconda

version: conda 22.9.0

2.3代碼

三.主要流程

3.1 接口分析,以及網頁結構分析

# 這是文章鏈接,其實id就是文章的id
# https://bbs.robomaster.com/forum.php?mod=viewthread&tid=9234
# 文章結構
# 大疆這個文章,在訪問網站時候,他會把文章內容在服務端拼接好,是沒辦法直接拿到接口數據的,
# 第一個方面就是,urllib訪問時候,拿到整個網頁結構,這個結構是不帶js執行的,雖然數據都有,但是是和瀏覽器里面有些定位不太一樣的,在用xpath解析時候,經常找不到,有點不太方便
# 第二個方面,就是因為里面有些內容需要登錄,這個登錄有兩種驗證方式,一種是token,一種是cookie,大疆是cookie,所以我們需要在請求頭中假如cooke訪問,分別用urllib和elenium實現

3.2 通過urllib攜帶cookie爬取網頁結構

import urllib.request
from lxml import etree
import json
from selenium.webdriver.common.by import By
from selenium import webdriver
import random 
import time
import pyautogui
from datetime import datetime
import ssl
import re
import urllib.request
def urllibRequest(url):headers = {'Cookie':'換成自己的,直接去網頁請求里面復制','User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1'}# 創建一個不驗證證書的上下文對象context = ssl._create_unverified_context()request = urllib.request.Request(url=url, headers=headers)response = urllib.request.urlopen(request, context=context)  # 在這里傳入context參數content = response.read().decode('UTF-8')return contenturl = "https://bbs.robomaster.com/forum.php?mod=viewthread&tid=9234"
content = urllibRequest(url)
print(content)

里面有一點需要注意的就是,這個網頁結構如果不能解析的話,要加這個,里面xml會報錯,替換一下就好


content_without_declaration = re.sub(r'^<\?xml.*\?>', '', content)
html_tree = etree.HTML(content_without_declaration)

在這里插入圖片描述

3.3 通過selenium攜帶cookie爬取網頁結構

直接給selenium加個請求頭

import urllib.request
from lxml import etree
import json
from selenium.webdriver.common.by import By
from selenium import webdriver
import random 
import time
import pyautogui
from datetime import datetime
import randomdef seleniumRequest(url,chrome_path,waitTime): headers = {'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1''Cookie':'換自己的'}options = webdriver.ChromeOptions()# 添加cookie到瀏覽器中options.add_experimental_option('excludeSwitches', ['enable-automation'])options.add_experimental_option('useAutomationExtension', False)# 添加Header到options中options.add_argument(f'user-agent={headers["User-Agent"]}')options.add_argument(f'cookie={headers["Cookie"]}')# 谷歌瀏覽器exe位置options.binary_location = chrome_path# 是否要啟動頁面# options.add_argument("--headless")  # 啟用無頭模式# GPU加速有時候會出bugoptions.add_argument("--disable-gpu")  # 禁用GPU加速options.add_argument("--disable-blink-features=AutomationControlled")driver = webdriver.Chrome(options=options)driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})# 啟動要填寫的地址,這就啟動瀏覽器driver.get(url)# 這是關閉瀏覽器# 等待頁面加載,可以根據實際情況調整等待時間driver.implicitly_wait(waitTime)# 獲取完整頁面結構full_page_content = driver.page_source# 關閉瀏覽器driver.quit()return full_page_content
# # 處理完整頁面結構
# print(full_page_content)
url = "https://bbs.robomaster.com/forum.php?mod=viewthread&tid=9234"
# print(url)chrome_path = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
waitTime = 8
# 獲取網頁結構
# 通過selenium調用瀏覽器訪問
content = seleniumRequest(url,chrome_path,waitTime)
print(content)

在這里插入圖片描述

3.4 網頁結構定位

一般都是通過xpath語法,一個div下面如果有多個類,我xpath就選不到了,可以用下面這個

//div[contains(@class, 'example')]

還有一種方式,可以用谷歌瀏覽器里面的工具,就不用自己一個一個選了
在這里插入圖片描述

還有就是xpath選取得結構,用txt保存下來里面代碼,包括結構

# # 解析對應數據
# contents = html_tree.xpath("//div[@class='message']")[0]
# print(contents)# # # 將選定的div元素轉換為字符串
# div_html = etree.tostring(contents, encoding="unicode")# # print(div_html)
# # # 將HTML保存為文件
# with open('output.txt', 'w', encoding='utf-8') as f:
#     f.write(div_html)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208921.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208921.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win系統一臺電腦安裝兩個不同版本的mysql教程

文章目錄 1.mysql下載zip包&#xff08;地址&#xff09;2.解壓在你的電腦上&#xff08;不要再C盤和帶中文的路徑&#xff09;3.創建my.ini文件4.更改環境變量&#xff08;方便使用, 可選&#xff09;5.打包mysql服務6.初始化mysql的data7.啟動剛剛打包的服務8.更改密碼 1.mys…

CentOS常用基礎命令大全(linux命令)2

CentOS常用基礎命令大全&#xff08;linux命令&#xff09; 1.關機 (系統的關機、重啟以及登出 ) 的命令 shutdown -h now 關閉系統(1) init 0 關閉系統(2) telinit 0 關閉系統(3) shutdown -h hours:minutes & 按預定時間關閉系統 shutdown -c 取消按預定時間關閉系統 sh…

【無標將列表中的多組參數依次帶入指定的函數將每次調用函數返回結果組成列表itertools.starmap()題】

【小白從小學Python、C、Java】 【計算機等考500強證書考研】 【Python-數據分析】 將列表中的多組參數 依次帶入指定的函數 將每次調用函數 返回結果組成列表 itertools.starmap() [太陽]選擇題 請問以下代碼輸出的結果是&#xff1f; import itertools a [(1, 2), (3, 4)] p…

基于JAVA+SpringBoot+Vue的前后端分離的醫院信息智能化HIS系統

?全網粉絲20W,csdn特邀作者、博客專家、CSDN新星計劃導師、java領域優質創作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取項目下載方式&#x1f345; 一、項目背景介紹&#xff1a; 隨著科技的不斷發展&a…

解決Ubuntu16.04沒聲音

第一步&#xff1a;安裝 PulseAudio Volum Control Ubuntu沒有聲音&#xff08;聽不到聲音&#xff09;的解決方法 第二步&#xff1a;No cards available for configuration 【解決Ubuntu18.04沒聲音&#xff1a;No cards available for configuration】 完美解決&#xf…

【WPF.NET開發】WPF中的對話框

目錄 1、消息框 2、通用對話框 3、自定義對話框 實現對話框 4、打開對話框的 UI 元素 4.1 菜單項 4.2 按鈕 5、返回結果 5.1 模式對話框 5.2 處理響應 5.3 非模式對話框 Windows Presentation Foundation (WPF) 為你提供了自行設計對話框的方法。 對話框是窗口&…

浙政釘SDK安裝

專有訂單SDK&#xff08;jar包&#xff09;下載 專有釘釘門戶 (dg-work.cn) Maven依賴 浙政釘 <!-- 浙政釘 --> <dependency><groupId>com.oracel</groupId><artifactId>zwdd-sdk-java</artifactId><version>1.2.0</version…

概率密度函數(PDF)正態分布

概率密度函數&#xff08;PDF&#xff09;是一個描述連續隨機變量取特定值的相對可能性的函數。對于正態分布的情況&#xff0c;其PDF有一個特定的形式&#xff0c;這個形式中包括了一個常數乘以一個指數函數&#xff0c;它假設誤差項服從均值為0的正態分布&#xff1a; p ( …

外匯天眼:新西蘭監管機構永久性停止對David McEwen及與其相關的實體的命令

新西蘭金融市場管理局&#xff08;FMA&#xff09;已對David Elgar McEwen及與其相關的實體&#xff08;McEwen and Associates&#xff09;發布了永久性停止令。 與McEwen先生相關的實體包括Stockfox Limited、Cosmopolitan Holdings Limited、Strategy Services Limited、Fun…

Ubuntu系統使用快速入門實踐(七)——軟件安裝與使用(3)

Ubuntu系統使用快速入門實踐系列文章 下面是Ubuntu系統使用系列文章的總鏈接&#xff0c;本人發表這個系列的文章鏈接均收錄于此 Ubuntu系統使用快速入門實踐系列文章總鏈接 下面是專欄地址&#xff1a; Ubuntu系統使用快速入門實踐系列文章專欄 文章目錄 Ubuntu系統使用快速…

在uniapp中,可以使用那些預定義的樣式類

u-flex&#xff1a;設置元素為彈性布局。u-flex-v&#xff1a;設置元素為縱向彈性布局。u-flex-h&#xff1a;設置元素為橫向彈性布局。u-p-10&#xff1a;設置元素的上下左右邊距為10rpx。u-p-t-10&#xff1a;設置元素的上邊距為10rpx。u-p-b-10&#xff1a;設置元素的下邊距…

教育心得整理

壓抑使人反抗&#xff0c;反抗就是報復&#xff0c;報復就會引起犯罪。要消滅犯罪&#xff0c;我們必須杜絕引起孩子報復心理的行為&#xff0c;更重要的是&#xff0c;我們一定要對孩子表現出來愛與尊重 限制批評的次數限制每次批評的范圍限制每次批評的強度 當彼此的信任和…

第一百九十五回 連接藍牙設備的細節

文章目錄 1. 概念介紹2. 實現方法2.1 示例代碼2.2 知識回顧2.3 實現方法3. 示例代碼我們在上一章回中介紹了"分享三個使用TextField的細節"沉浸式狀態樣相關的內容,本章回中將介紹SliverList組件.閑話休提,讓我們一起Talk Flutter吧。 1. 概念介紹 我們在本章回中…

機器學習之無監督學習:九大聚類算法

今天&#xff0c;和大家分享一下機器學習之無監督學習中的常見的聚類方法。 今天&#xff0c;和大家分享一下機器學習之無監督學習中的常見的聚類方法。 在無監督學習中&#xff0c;我們的數據并不帶有任何標簽&#xff0c;因此在無監督學習中要做的就是將這一系列無標簽的數…

Spring Cloud Gateway中對admin端點進行認證

前言 我們被掃了一個漏洞&#xff0c;SpringBoot Actuator 未授權訪問&#xff0c;漏洞描述是這樣的&#xff1a; Actuator 是 springboot 提供的用來對應用系統進行自省和監控的功能模塊&#xff0c;借助于 Actuator 開發者可以很方便地對應用系統某些監控指標進行查看、統計…

計算機基礎知識65

cookie和session的使用 # 概念&#xff1a;cookie 是客戶端瀏覽器上的鍵值對 # 目的&#xff1a;為了做會話保持 # 來源&#xff1a;服務端寫入的&#xff0c;服務端再返回的響應頭中寫入&#xff0c;瀏覽器會自動取出來 存起來是以key value 形式&#xff0c;有過期時間、path…

STM32單片機項目實例:基于TouchGFX的智能手表設計(3)嵌入式程序任務調度的設計

STM32單片機項目實例&#xff1a;基于TouchGFX的智能手表設計&#xff08;3&#xff09;嵌入式程序任務調度的設計 目錄 一、嵌入式程序設計 1.1輪詢 1.2 前后臺&#xff08;中斷輪詢&#xff09; 1.3 事件驅動與消息 1.3.1 事件驅動的概念 1.4 定時器觸發事件驅動型的任…

golang游戲服務器 - tgf系列課程02

環境準備和服務創建 課程介紹了TGF框架的前期的準備工作,啟動一個websocket網關服務,和大廳邏輯節點。 文章最后附有項目案例地址和視頻教程地址,下期預告等信息安裝第三方軟件 tgf框架的服務發現依賴于Consul,所以我們需要先安裝并啟動Consul官網安裝 :訪問官網下載對應的包…

點云從入門到精通技術詳解100篇-針對三維點云分類神經網絡模型的不可感知對抗攻擊

目錄 前言 國內外研究現狀 三維點云分類神經網絡 三維點云傳統攻擊方法

C/C++ 實現動態資源文件釋放

當我們開發Windows應用程序時&#xff0c;通常會涉及到使用資源&#xff08;Resource&#xff09;的情況。資源可以包括圖標、位圖、字符串等&#xff0c;它們以二進制形式嵌入到可執行文件中。在某些情況下&#xff0c;我們可能需要從可執行文件中提取自定義資源并保存為獨立的…