我一直在使用这个抓取工具来抓取此网址的评论家评论: 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 来抓取烂番茄网站上的多页评论。以下是如何执行此操作:
-
识别总页数: 需要确定评论部分的总页数。可以通过在初始抓取过程中查找页面导航元素或计算评论总数并除以每页评论数来实现此操作。
-
实现循环: 使用循环来遍历评论页面。此循环将迭代请求 URL 中的页码。
-
更新 URL: 在循环的每次迭代中,使用当前页码更新评论页面的 URL。
-
数据追加: 从每个页面抓取评论后,将它们追加到的主 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