用selenium+ChromeDriver豆瓣電影 肖申克的救贖 短評爬取(pycharm 爬蟲)

一、豆瓣電影 肖申克的救贖 短評url=https://movie.douban.com/subject/1292052/comments

?

?

二、基本知識點講解

1. Selenium 的基本使用

Selenium 是一個用于自動化瀏覽器操作的庫,常用于網頁測試和爬蟲。代碼中使用了以下 Selenium 的核心功能:

  • webdriver.Chrome: 啟動 Chrome 瀏覽器實例。

  • driver.get(url): 打開指定的網頁。

  • driver.find_elements: 查找頁面中符合條件的所有元素。

  • driver.execute_script: 執行 JavaScript 代碼(例如點擊按鈕)。

  • driver.quit(): 關閉瀏覽器并結束 WebDriver 會話。


2. ChromeDriver 的配置

  • Service: 用于指定 ChromeDriver 的路徑。

  • executable_path: ChromeDriver 可執行文件的路徑(需與 Chrome 瀏覽器版本匹配)。


3. 頁面元素的定位

Selenium 提供了多種定位頁面元素的方式,代碼中使用了以下方法:

  • By.XPATH: 使用 XPath 表達式定位元素。

    • 例如://div[@class="comment-item"]?表示查找所有 class 為?comment-item?的?div?元素。

  • By.CLASS_NAME: 通過 class 名稱定位元素(代碼中未直接使用,但 XPath 中包含了類似功能)。


4. 顯式等待與隱式等待

  • 顯式等待 (WebDriverWait):

    • 使用?WebDriverWait?和?expected_conditions?來等待特定條件滿足后再執行操作。

    • 例如:EC.presence_of_element_located?等待某個元素出現在頁面中。

    • 優點:更靈活,可以針對特定條件設置超時時間。

  • 隱式等待 (time.sleep):

    • 使用?time.sleep?強制等待一段時間。

    • 例如:time.sleep(3)?等待 3 秒。

    • 缺點:不夠靈活,可能會導致不必要的等待。


5. 爬取短評的邏輯

  • 初始化變量:

    • comments = []: 用于存儲爬取到的短評內容。

  • 爬取短評:

    • 使用?find_elements?查找所有短評元素。

    • 使用?find_element?提取每個短評的具體內容(span?標簽中的文本)。

    • 將提取的內容添加到?comments?列表中。

  • 異常處理:

    • 使用?try-except?捕獲可能的異常(例如元素未找到或提取失敗),避免程序崩潰。


6. 翻頁功能

  • 查找下一頁按鈕:

    • 使用 XPath 定位下一頁按鈕(//a[@class='next'])。

  • 檢查按鈕狀態:

    • 通過?get_attribute("class")?檢查按鈕是否包含?disabled?類(表示不可點擊)。

  • 點擊下一頁:

    • 使用?driver.execute_script("arguments[0].click();", next_btn)?通過 JavaScript 點擊按鈕(避免某些頁面中按鈕無法直接點擊的問題)。

  • 等待新頁面加載:

    • 使用?WebDriverWait?等待新頁面的短評加載完成。


7. 輸出結果

  • 使用?print?輸出爬取到的短評數量和具體內容。

  • 例如:短評 1: 這是一條評論內容


8. 關閉瀏覽器

  • 使用?driver.quit()?關閉瀏覽器并釋放資源。

三、具體代碼以及詳解的展示?

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time# 配置 ChromeDriver
# 使用 Service 類指定 ChromeDriver 的路徑
service = Service(executable_path=r"D:\chromdriver\chromedriver-win64\chromedriver.exe")
# 啟動 Chrome 瀏覽器
driver = webdriver.Chrome(service=service)# 初始化變量,用于存儲爬取到的短評
comments = []# 打開豆瓣電影短評頁面
driver.get("https://movie.douban.com/subject/1292052/comments")
# 等待頁面加載,避免頁面未完全加載導致元素找不到
time.sleep(3)# 爬取短評
while True:try:# 使用顯式等待,等待頁面中的短評元素加載完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@class="comment-item"]')))# 查找當前頁面中所有的短評元素comment_elements = driver.find_elements(By.XPATH, '//div[@class="comment-item"]')# 遍歷每個短評元素,提取內容for comment in comment_elements:try:# 提取短評的具體內容(位于 span 標簽中,class 為 "short")content = comment.find_element(By.XPATH, './/span[@class="short"]').text# 將提取的內容添加到 comments 列表中comments.append(content)except Exception as e:# 如果某個短評提取失敗,跳過并繼續處理下一個短評continueexcept Exception as e:# 如果頁面加載失敗或短評元素未找到,退出循環break# 嘗試翻頁try:# 查找下一頁按鈕next_btn = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//a[@class='next']")))# 檢查下一頁按鈕是否可點擊(是否包含 "disabled" 類)if "disabled" in next_btn.get_attribute("class"):# 如果按鈕不可點擊,說明已經是最后一頁,退出循環breakelse:# 使用 JavaScript 點擊下一頁按鈕(避免某些頁面中按鈕無法直接點擊的問題)driver.execute_script("arguments[0].click();", next_btn)# 等待新頁面的短評元素加載完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@class="comment-item"]')))# 等待頁面完全加載time.sleep(2)except Exception as e:# 如果找不到下一頁按鈕或翻頁失敗,退出循環break# 輸出結果
print(f"共爬取到 {len(comments)} 條短評:")
# 遍歷 comments 列表,打印每條短評
for i, comment in enumerate(comments, 1):print(f"短評 {i}: {comment}")# 關閉瀏覽器
driver.quit()

四、運行結果展示(具體如何找到XPATH在專欄里面有)?

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

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

相關文章

開源在線客服系統源碼-前端源碼加載邏輯

客服源碼是使用Golang(又稱Go)開發的,Go是Google公司開發的一種靜態強類型、編譯型、并發型,并具有垃圾回收功能的編程語言。Go 天生支持并發。好處太多就不多說了。 全源碼客服系統用戶,想要針對自己的業務,進行二次開發&#xf…

Oracle數據庫服務器地址變更與監聽配置修改完整指南

一、前言 在企業IT運維中,Oracle數據庫服務器地址變更是常見的運維操作。本文將詳細介紹如何安全、高效地完成Oracle數據庫服務器地址變更及相關的監聽配置修改工作,確保數據庫服務在遷移后能夠正常運行。 二、準備工作 1. 環境檢查 確認新舊服務器I…

g對象在flask中主要是用來實現什么

在Flask中,g對象(全稱flask.g)是一個線程局部(thread-local)的臨時存儲對象,主要用于在單個請求的上下文(request context)中共享數據。它的核心作用是為同一請求的不同處理階段&…

工具介紹《WireShark》

Wireshark 過濾命令中符號含義詳解 一、比較運算符 Wireshark 支持兩種比較運算符語法:英文縮寫(如 eq)和 C語言風格符號(如 ),兩者功能等價。 符號(英文縮寫)C語言風格符號含義示…

JavaScrip-模版字符串的詳解

1.模版字符串的詳解 1.1 模版字符串的使用方法 在ES6之前,如果我們想要將字符串和一些動態的變量(標識符)拼接到一起,是非常丑陋的(ugly) ES6允許我們使用模版字符串來嵌入變量或者表達式來進行拼接 首先,…

STM32C011 進入停止模式和待機模式

對于STM32C011J4M3微控制器,你可以使用HAL庫來實現進入停止模式(Stop Mode)和待機模式(Standby Mode)。下面是進入停止模式和待機模式的示例代碼: 進入停止模式代碼示例: #include "stm3…

海康設備http監聽接收報警事件數據

http監聽接收報警事件數據 海康獲取設備報警事件數據兩種方式: 1、sdk 布防監聽報警事件數據(前面文章有示例) 2、http監聽接收報警事件數據 http監聽接收報警事件數據,服務端可以使用netty通過端口來監聽獲取事件數據。 WEB 端…

FastAPI 全面指南:功能解析與應用場景實踐

FastAPI 全面指南:功能解析與應用場景實踐 FastAPI 是一個現代、快速(高性能)的 Python Web 框架,用于構建 API。它基于標準 Python 類型提示,使用 Starlette 和 Pydantic 構建,提供了極高的性能并簡化了開…

【STM32】編寫程序控制開發板的RGB LED燈

目錄 1、原理圖2、文件結構3、使用寄存器模式點亮3.1、什么是寄存器3.2、寄存器開發的本質3.3、寄存器開發步驟3.4、主要源碼3.4.1、main.c3.4.2、drv_gpio.h3.4.3、drv_gpio.c3.4.4、使用BSRR和BRR影子寄存器優化drv_gpio.c3.4.5、效果演示 4、使用標準庫模式點亮4.1、使用標準…

MyBatis-Plus 的加載及初始化

在 Spring Boot 啟動過程中,MyBatis-Plus 的加載和初始化涉及多個階段的工作。這些工作包括 MyBatis-Plus 自身的配置解析、Mapper 接口的掃描與注冊、SQL 語句的動態注入以及底層 MyBatis 的初始化等。以下是對整個過程的詳細分析: 1. Spring Boot 啟動…

SpringBoot中安全的設置阿里云日志SLS的accessKey

眾所周知,阿里云的服務都是基于accesskeyId和accesskeySecret來進行身份鑒權的,但唯獨日志因為需要寫入到.xml文件里對于accesskeyId和accesskeySecret需要進行一定程度的改進,尤其是使用了jasypt進行加密的參數傳遞進去logback.xml更是會遇到需要對參數進行解密的問題,而官網只…

關于解決Ubuntu終端及系統字體大小的問題

在Ubuntu中調整終端和系統字體大小可以通過以下方法(可能不僅僅只是這幾種)實現: 1. 調整系統字體大小 打開終端并輸入以下命令,安裝GNOME Tweaks,等待安裝完成: sudo apt install gnome-tweaks 接著進行…

Rust vs. Go: 性能測試(2025)

本內容是對知名性能評測博主 Anton Putra Rust vs. Go (Golang): Performance 2025 內容的翻譯與整理, 有適當刪減, 相關數據和結論以原作結論為準。 再次對比 Rust 和 Go,但這次我們使用的是最具性能優勢的 HTTP 服務器庫---Hyper,它基于 Tokio 異步運…

【NLP 48、大語言模型的神秘力量 —— ICL:in context learning】

目錄 一、ICL的優勢 1.傳統做法 2.ICL做法 二、ICL的發展 三、ICL成因的兩種看法 1.meta learning 2.Bayesian Inference 四、ICL要點 ① 語言模型的規模 ② 提示詞prompt中提供的examples數量和順序 ③ 提示詞prompt的形式(format) 五、fine-tune VS I…

兩數之和解題記錄

開始打算用一個數組保存差值,arr[target-nums[i]] i, 只要arr[nums[i]]有內容就能滿足target,返回arr[nums[i]]和i。但是會出現復數的情況,所以換成map。 換成map就只用一邊遍歷,一遍檢查和存入對應key就行了,value就…

P1722 矩陣Ⅱ - 洛谷

題源:P1722 矩陣 II - 洛谷 看了題目之后,需要注意的是: ①在1 ~ i 個格子中紅色數量 > 黑色數量 ②最后,在2 * n 個格子中,紅色數量 黑色數量 根據這兩個約束條件,可以知道,第一個格…

數據庫——MySQL基礎操作

一、表結構與初始數據 假設存在以下兩張表: 1. student 表 字段名數據類型描述idINT學生唯一標識符nameVARCHAR(100)學生姓名ageINT學生年齡sexVARCHAR(10)學生性別 初始數據: idnameagesex1張三20男2李四22女3王五21男 2. course 表 字段名數據類…

行業白皮書2025 | 益企研究院:AI時代的存儲基石

在當今科技飛速發展的時代,AI技術已成為推動各行業變革的關鍵力量。日前,益企研究院重磅發布《AI時代的存儲基石》白皮書。 下載方式:關注“渡江客涂鴉板”,回復st250326獲取免費下載地址 數據需求與技術挑戰: AI技術…

音視頻新人如何快速上手nginx-rtmp-module

一、整體設計架構 nginx-rtmp-module 是 Nginx 的一個擴展模塊,專門為 Nginx 添加了對 RTMP 協議的支持。其核心功能包括: RTMP推流(publish) RTMP拉流(play) 流轉發(relay) 流錄…

vue 封裝 Axios菜鳥教程

1、Axios依賴下載 $ npm install axios 2、以下鏈接為Axios 的api Axios 實例 | Axios中文文檔 | Axios中文網 3、 項目新建request.js,文件名稱按照駝峰命名法就可以 4、封裝request.js代碼如下 import axios from "axios"//創建axios實例&#xff0…