首页 > 编程问答 >如何从烂番茄上抓取一页以上的评论?

如何从烂番茄上抓取一页以上的评论?

时间:2024-08-01 15:57:23浏览次数:9  
标签:python web-scraping

我一直在使用这个抓取工具来抓取此网址的评论家评论: https://www.rottentomatoes.com/m/avengers_endgame/reviews 尽管如此,我一直在努力解决如何浏览其他页面的问题因为这目前正在刮擦第一页的评论家评论。有谁知道我会怎么做?

import selenium
from selenium import webdriver
import pandas as pd
driver = webdriver.Chrome()
driver.get("https://www.rottentomatoes.com/m/avengers_endgame/reviews")
review_1df = pd.DataFrame(columns=['Date', 'Reviewer', 'Website', 'Review', 'Score'])
dates = []
reviews = []
scores = []
newscores = []
names = []
sites = []
results = driver.find_elements_by_class_name("review_area")
reviewnum = 1
reviewers = driver.find_elements_by_class_name("col-xs-8")

for r in results:
    dates.append(r.find_element_by_class_name('subtle').text)
    reviews.append(r.find_element_by_class_name('the_review').text)
    revs = r.find_element_by_class_name('review_desc')
    scores.append(revs.find_element_by_class_name('subtle').text)
    
    for r in reviewers:
        names.append(r.find_element_by_xpath('//*[@id="reviews"]/div[2]/div[4]/div[' +str(reviewnum)+ ']/div[1]/div[3]/a[1]').text)
        sites.append(r.find_element_by_xpath('//*[@id="reviews"]/div[2]/div[4]/div[' +str(reviewnum)+']/div[1]/div[3]/a[2]/em').text)
        reviewnum+=1

for score in scores:
    if score == ('Full Review'):
        newscores.append('no score')
    else:
        score2 = score[14:]
        newscores.append(score2)
        
review_1df['Date'] = dates
review_1df['Review'] = reviews
review_1df['Score'] = newscores
review_1df['Reviewer'] = names
review_1df['Website'] = sites

可以通过迭代页面并修改提供的代码中的 URL 来抓取烂番茄网站上的多页评论。以下是如何执行此操作:

  1. 识别总页数: 需要确定评论部分的总页数。可以通过在初始抓取过程中查找页面导航元素或计算评论总数并除以每页评论数来实现此操作。

  2. 实现循环: 使用循环来遍历评论页面。此循环将迭代请求 URL 中的页码。

  3. 更新 URL: 在循环的每次迭代中,使用当前页码更新评论页面的 URL。

  4. 数据追加: 从每个页面抓取评论后,将它们追加到的主 DataFrame。

以下是如何修改的代码以包含这些更改的方法:

import selenium
from selenium import webdriver
import pandas as pd
import time

driver = webdriver.Chrome()

# 从这里开始修改
review_1df = pd.DataFrame(columns=['Date', 'Reviewer', 'Website', 'Review', 'Score'])
# 这将存储我们所有的数据
max_pages = 5  # 要抓取的页面数。根据网站调整此值

for page_num in range(1, max_pages + 1):
    # 构造每页的 URL
    url = f"https://www.rottentomatoes.com/m/avengers_endgame/reviews?page={page_num}"
    driver.get(url)

    # 等待页面加载(可选,但推荐)
    time.sleep(2)

    # 的现有抓取逻辑保持不变
    dates = []
    reviews = []
    scores = []
    newscores = []
    names = []
    sites = []
    results = driver.find_elements_by_class_name("review_area")
    reviewnum = 1
    reviewers = driver.find_elements_by_class_name("col-xs-8")

    for r in results:
        dates.append(r.find_element_by_class_name('subtle').text)
        reviews.append(r.find_element_by_class_name('the_review').text)
        revs = r.find_element_by_class_name('review_desc')
        scores.append(revs.find_element_by_class_name('subtle').text)

    for r in reviewers:
        names.append(r.find_element_by_xpath('//*[@id="reviews"]/div[2]/div[4]/div[' +str(reviewnum)+ ']/div[1]/div[3]/a[1]').text)
        sites.append(r.find_element_by_xpath('//*[@id="reviews"]/div[2]/div[4]/div[' +str(reviewnum)+']/div[1]/div[3]/a[2]/em').text)
        reviewnum+=1

    for score in scores:
        if score == ('Full Review'):
            newscores.append('no score')
        else:
            score2 = score[14:]
            newscores.append(score2)

    # 创建一个临时 DataFrame 来存储当前页面的数据
    temp_df = pd.DataFrame({
        'Date': dates,
        'Review': reviews,
        'Score': newscores,
        'Reviewer': names,
        'Website': sites
    })

    # 将临时 DataFrame 追加到主 DataFrame
    review_1df = review_1df.append(temp_df, ignore_index=True)

driver.quit()

# 现在,review_1df 包含所有页面中的所有评论
print(review_1df)

此代码首先确定要抓取的页数 (在本例中为 5,但应该根据网站上的实际页数对其进行调整),然后循环遍历每一页,使用格式化的 URL 抓取数据。最后,它将每个页面的数据组合成一个 DataFrame。此方法提供了一种更结构化且有效的方式从烂番茄中提取大量评论。

请记住,网站结构可能会发生变化,因此请务必检查网站并相应地调整代码。

标签:python,web-scraping
From: 64198611

相关文章

  • python 音频处理(1)——重采样、音高提取
    采集数据->采样率调整使用torchaudio进行重采样(cpu版)首先导入相关包,既然使用torch作为我们的选项,安装torch环境我就不必多说了,如果你不想用torch可以使用后文提到的另一个库1importtorch2importtorchaudio3fromtorchaudio.transformsimportResample4fromtime......
  • 用于从连接到 LAN 交换机的四个 Arduino 扩展板读取/保存数据的 Python 代码
    我有四个Arduino扩展板连接到LAN交换机。每个人都会发出一条“HelloJane”消息。LAN交换机已连接到我的PC。我需要将每个Arduino的数据/消息保存在PC上的单独文件夹中。请帮助使用Python脚本/代码。我能够看到来自所有四个Arduino的消息,但无法将它们保存到文......
  • 使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft
    我正在尝试从kubernetes集群外部连接到kubernetesminikubekafkapod。服务器启动没有任何问题,但我无法设法将本地kafka生产者/消费者连接到外部kafkapod。在集群内的kafka服务器映像上,我将bootstrap-server设置为:bin/kafka-topics.sh--create--bootst......
  • python llama_index.indices.list.retrievers 导入错误
    fromllama_indeximportGPTListIndexfromllama_index.indices.list.retrieversimportListIndexLLMRetrieverdocuments=SimpleDirectoryReader('./data').load_data()index=GPTListIndex.from_documents(documents,service_context=service_context)r......
  • 如何使用 python 和 bs4 修复抓取 web 表输出 csv
    请帮帮我,,我想在“td”、“Barcode”和“namaproduk”中获取2个数据,但我得到的数据非常糟糕。我应该修复什么?importcsvimportrequestsfrombs4importBeautifulSoupoutfile=open("dataaa.csv","w",newline='')writer=csv.writer(outfile)page=0whilepag......
  • 基于Django的超市小程序+47822(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小
    基于django超市小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,超市小程序被用户普遍使用,为方便用户能够可以随时进行超市小程序的数据信息管理,特开发了基于djan......
  • 【优秀python django系统案例】基于python的医院挂号管理系统,角色包括医生、患者、管
    随着信息技术的迅猛发展,传统的医院挂号管理方式面临着效率低下、排队时间长、信息不对称等诸多问题。这些问题不仅影响患者的就医体验,也加重了医院工作人员的负担。在此背景下,基于Python的医院挂号管理系统应运而生。该系统旨在通过信息化手段优化挂号流程,提高管理效率,提升医疗......
  • Python-PLAXIS自动化建模技术与典型岩土工程
    原文链接:Python-PLAXIS自动化建模技术与典型岩土工程https://blog.csdn.net/2301_78164062/article/details/140607885?spm=1001.2014.3001.5501一:Plaxis软件及PlaxisPythonAPI环境搭建1、Plaxis2D\Plaxis3D软件2、面向对象编程语言Python及其开发环境Spyder3、Plaxis输......
  • 在Conda环境中安装python内核
    我刚刚开始使用jupyter笔记本进行我的开发过程。我首先创建一个新的python环境:$condacreate-ntestenv然后激活它:$sourceactivatetestenv并安装python内核模块:$pipinstallipykernel现在,模糊性开始了。我只想专门为我的活动环境创建一个新内核。......
  • C++11 中的 python 海象运算符 (:=) 等效吗?
    最近我在Python中经常使用:=运算符,这样:ifmy_object:=SomeClass.function_that_returns_object():#dosomethingwiththisobjectifitexistsprint(my_object.some_attribute)问题有没有办法在c++11中做到这一点而不使用stdlib?例如......