selenium爬取TapTap評論

上一篇寫的beautifulsoup和request爬取出的結果有誤。首先,TapTap網頁以JS格式解析,且評論并沒有“下一頁”,而是每次加載到底部就要進行等待重新加載。我們需要做的,是模仿瀏覽器的行為,所以這里我們用Selenium的方式爬取。

下載ChromeDriver

ChromeDriver作用是給Pyhton提供一個模擬瀏覽器,讓Python能夠運行一個模擬的瀏覽器進行網頁訪問 用selenium進行鼠標及鍵盤等操作獲取到網頁真正的源代碼。

官方下載地址:https://sites.google.com/a/chromium.org/chromedriver/downloads

注意,一定要下載自己chrome瀏覽器對應版本的驅動,根據自己的電腦版本下載對應系統的文件

以Windows版本為例,將下載好的chromedriver_win64.zip解壓得到一個exe文件,將其復制到Python安裝目錄下的Scripts文件夾即可

爬蟲操作

首先導入所需庫

import pandas as pd
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

滾動到底部的驅動

def scroll_to_bottom(driver):# 使用 JavaScript 模擬滾動到頁面底部driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

爬取評論

def get_taptap_reviews(url, max_reviews=50):reviews = []driver = webdriver.Chrome()  # 需要安裝 Chrome WebDriver,并將其路徑添加到系統環境變量中driver.get(url)try:# 等待評論加載完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "text-box__content")))last_review_count = 0while len(reviews) < max_reviews:review_divs = driver.find_elements(By.CLASS_NAME, 'text-box__content')for review_div in review_divs[last_review_count:]:review = review_div.text.strip()reviews.append(review)if len(reviews) >= max_reviews:breakif len(reviews) >= max_reviews:breaklast_review_count = len(review_divs)# 模擬向下滾動頁面scroll_to_bottom(driver)# 等待新評論加載time.sleep(10)  # 等待時間也可以根據實際情況調整,確保加載足夠的評論# 檢查是否有新評論加載new_review_divs = driver.find_elements(By.CLASS_NAME, 'text-box__content')if len(new_review_divs) == len(review_divs):break  # 沒有新評論加載,退出循環finally:driver.quit()return reviews[:max_reviews]

將評論輸出到excel中

def save_reviews_to_excel(reviews, filename='taptap.xlsx'):df = pd.DataFrame(reviews, columns=['comment'])df.to_excel(filename, index=False)

main

if __name__ == "__main__":url = "https://www.taptap.cn/app/247283/review"max_reviews = 50reviews = get_taptap_reviews(url, max_reviews)save_reviews_to_excel(reviews)

查看輸出的結果

代碼匯總

import pandas as pd
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdef scroll_to_bottom(driver):# 使用 JavaScript 模擬滾動到頁面底部driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")def get_taptap_reviews(url, max_reviews=50):reviews = []driver = webdriver.Chrome()  # 需要安裝 Chrome WebDriver,并將其路徑添加到系統環境變量中driver.get(url)try:# 等待評論加載完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "text-box__content")))last_review_count = 0while len(reviews) < max_reviews:review_divs = driver.find_elements(By.CLASS_NAME, 'text-box__content')for review_div in review_divs[last_review_count:]:review = review_div.text.strip()reviews.append(review)if len(reviews) >= max_reviews:breakif len(reviews) >= max_reviews:breaklast_review_count = len(review_divs)# 模擬向下滾動頁面scroll_to_bottom(driver)# 等待新評論加載time.sleep(10)  # 等待時間也可以根據實際情況調整,確保加載足夠的評論# 檢查是否有新評論加載new_review_divs = driver.find_elements(By.CLASS_NAME, 'text-box__content')if len(new_review_divs) == len(review_divs):break  # 沒有新評論加載,退出循環finally:driver.quit()return reviews[:max_reviews]def save_reviews_to_excel(reviews, filename='taptap.xlsx'):df = pd.DataFrame(reviews, columns=['comment'])df.to_excel(filename, index=False)if __name__ == "__main__":url = "https://www.taptap.cn/app/247283/review"max_reviews = 50reviews = get_taptap_reviews(url, max_reviews)save_reviews_to_excel(reviews)

?

?

?

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

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

相關文章

2024年數維杯B題完整代碼和思路論文講解與分析

2024數維杯數學建模完整代碼和成品論文已更新&#xff0c;獲取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/bgic2nbxs2h41pvt?singleDoc# 2024數維杯數學建模B題45頁論文和代碼已完成&#xff0c;代碼為全部問題的代碼 論文包括摘要、問題重述、問題分析、模型假設、…

【項目實戰】使用Github pages、Hexo如何10分鐘內快速生成個人博客網站

文章目錄 一.準備工作1.安裝git2.安裝node安裝 cnpm 3.使用 GitHub 創建倉庫&#xff0c;并配置 GitHub Pages0.Github Pages是什么1. 在 GitHub 上創建一個新倉庫2. 創建您的靜態網站3. 啟用 GitHub Pages4. 等待構建完成5. 訪問您的網站 二. Hexo1.什么是Hexo2.安裝Hexo1. 安…

【MySQL】求和查詢,目標值int,但空數據時返回null的問題(Java)

問題分析 int selectDeviceMonthRepairCount(String deviceType, String month);<select id"selectDeviceMonthRepairCount" resultType"int">SELECT SUM(repair_count)FROM warranty_recordsWHERE device_type #{deviceType}AND nian_yue #{month…

【代碼筆記】高并發場景下問題解決思路

高并發指的是在單位時間內&#xff0c;瞬時流量激增&#xff0c;系統需要同時處理大量并行的請求或操作。這種情況通常出現在面向大量用戶或服務的分布式系統中&#xff0c;尤其是當用戶請求高度集中時&#xff0c;比如促銷活動、秒殺活動、注冊搶課、熱點事件、定時任務調度等…

Maven 插件使用

1.spring-boot-maven-plugin 我們直接使用 maven package &#xff08;maven自帶的package打包功能&#xff09;&#xff0c;打包Jar包的時候&#xff0c;不會將該項目所依賴的Jar包一起打進去&#xff0c;在使用java -jar命令啟動項目時會報錯&#xff0c;項目無法正常啟動。…

開源相機管理庫Aravis例程學習(七)——chunk-parser

開源相機管理庫Aravis例程學習&#xff08;七&#xff09;——chunk-parser 簡介例程代碼函數說明arv_camera_create_chunk_parserarv_camera_set_chunksarv_chunk_parser_get_integer_value 簡介 本文針對官方例程中的&#xff1a;05-chunk-parser做簡單的講解。并介紹其中調…

kali linux更新卡在libc6:amd64 (2.37-15)

適配于linux的windows子系統&#xff0c;wsl2&#xff0c;安裝kali linux&#xff0c;運行 sudo apt update 卡在&#xff1a;Setting up libc6:amd64 (2.37-15) … 關機重啟、重新修復執行也不行 解決辦法&#xff1a;kill當前apt進程或者關機重啟kali-linux&#xff0c;然…

【系統架構師】-選擇題(十二)計算機網絡

1、網閘的作用&#xff1a;實現內網與互聯網通信&#xff0c;但內網與互聯網不是直連的 2、管理距離是指一種路由協議的路由可信度。15表示該路由信息比較可靠 管理距離越小&#xff0c;它的優先級就越高&#xff0c;也就是可信度越高。 0是最可信賴的&#xff0c;而255則意味…

MySQL變量的定義與使用(一)

一、標識符的命名規范 1、不能以數字開頭 2、不能使用關鍵字 3、只能使用_和$符號&#xff0c;不允許使用其他符號 二、定義MySQL變量的方法 set userName"鵝卵石"; #讀取變量 select userName as 名稱; #讀取時包含賦值操作 select userName:喜羊羊 as 賦值查詢名…

【JavaScript】內置對象 - 數組對象 ① ( 數組簡介 | 數組創建 | 數組類型檢測 )

文章目錄 一、數組對象1、數組簡介2、數組創建3、數組檢測 - Array.isArray() 方法4、數組檢測 - instanceof 運算符 Array 數組對象參考文檔 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array 一、數組對象 1、數組簡介 在 JavaScr…

(三十八)第 6 章 樹和二叉樹(二叉樹的二叉線索存儲)

1. 背景說明 2. 示例代碼 1) errorRecord.h // 記錄錯誤宏定義頭文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 從文件路徑中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrc…

Html生成自定義函數的圖形(2024/5/10)

大概效果如下&#xff1a; 可以自定義函數和x的定義域。 我們可以使用數學表達式解析庫來解析用戶輸入的函數方程&#xff0c;并根據給定的 x 區間計算函數的值&#xff0c;然后使用圖表庫繪制圖形。 在這里&#xff0c;我將使用 math.js 庫來解析數學表達式&#xff0c;并使…

探索計算之美:HTML CSS 計算器案例

本次案例是通過HTML和CSS&#xff0c;我們可以為計算器賦予獨特的外觀和功能&#xff1b; 在這個計算器中&#xff0c;你將會發現&#xff1a; 簡潔清晰的界面設計&#xff0c;使用戶能夠輕松輸入和查看計算結果。利用HTML構建的結構&#xff0c;確保頁面具有良好的可訪問性和…

【全開源】JAVA上門家政服務系統源碼微信小程序+微信公眾號+APP+H5

功能介紹 用戶端&#xff1a;精準分類、支持家政、維修、萬能服務、一口價、報價、線上、各類家政服務、優惠專區、師傅入駐、商家入駐、我的需求、補費明細、我的投訴 師傅端&#xff1a;接單池、消息通知、接單管理、今日訂單、師傅入駐、我的錢包、實名認證 商家端&#…

HTTPS 原理和 TLS 握手機制

HTTPS的概述與重要性 在當今數字化時代&#xff0c;網絡安全問題日益凸顯&#xff0c;數據在傳輸過程中的安全性備受關注。HTTPS 作為一種重要的網絡通信協議&#xff0c;為數據的傳輸提供了強有力的安全保障。它是在 HTTP 的基礎上發展而來&#xff0c;通過引入數據加密機制&a…

流量分析(一)

數據庫類流量分析 MySQL流量 常規操作&#xff0c;查找flag ctfhub{} 注意要選擇字符集 Redis流量 查找ctfhub結果沒找到 嘗試把其變成十六進制繼續進行查找 看到了前半段flag 接著往下看 找到了后半段的flag MongoDB流量 還是一樣查找ctfhub 字符串沒找到 轉成十六進制也沒…

c 在線教育系統論文,在線教育需要在哪些渠道做付費推廣呢?

隨著在網上學習的人越來越多&#xff0c;很多在線教育公司都開發了屬于自己的平臺。如果只做開發&#xff0c;不去做運營推廣的話&#xff0c;這個在線平臺就等于是白做了。那么在線教育需要在哪些渠道做付費推廣呢? 1、官網廣告推薦位 Banner作為一款展示型頁面橫幅廣告&…

Spring狀態機的實現原理和業務場景

Spring Statemachine 是 Spring Framework 的一部分&#xff0c;它提供了一種實現狀態機的方式&#xff0c;允許開發者定義狀態機的狀態、事件、行為和轉換。狀態機是一種計算模型&#xff0c;它可以根據一系列規則從一個狀態轉移到另一個狀態。以下 V 哥將從Spring狀態機的基本…

OpenVoiceV2本地部署教程,蘋果MacOs部署流程,聲音響度統一,文字轉語音,TTS

最近OpenVoice項目更新了V2版本&#xff0c;新的模型對于中文推理更加友好&#xff0c;音色也得到了一定的提升&#xff0c;本次分享一下如何在蘋果的MacOs系統中本地部署OpenVoice的V2版本。 首先下載OpenVoiceV2的壓縮包&#xff1a; OpenVoiceV2-for-mac代碼和模型 https:…

Kitti數據集再識(官網閱讀)

KITTI數據集中真值與標定參數 0. 前言 為了再研KITTI數據集及方便下載文件,特地買了梯子,心疼人民幣QWQ~555 1. KITTI-home Welcome to the KITTI Vision Benchmark Suite! 我們利用我們的自動駕駛平臺開發新穎的具有挑戰性的真實世界計算機視覺基準。我們感興趣的任務是…