爬取携程评论:如何解决重复评论问题并获取所有评论
爬取评论发现输出的很多是重复的,怎么办?如何保证能可以加载每一页的评论,如何修改内容:如果输出的评论重复,可能是因为页面加载速度较慢,导致获取到的页面源码没有更新。可以尝试加入一些等待时间,等待页面加载完成后再进行下一步操作。
另外,你可以尝试通过修改代码来加载每一页的评论。可以参考以下步骤:
-
获取当前页的所有评论:
- 使用XPath表达式定位到评论的div元素,然后依次提取每个div元素中的内容和时间。
- 将提取到的内容和时间添加到Excel表格中。
-
点击下一页按钮:
- 使用find_element()方法定位到下一页按钮的元素。
- 使用execute_script()方法执行JavaScript代码来点击按钮,模拟用户点击操作。
-
等待页面加载完成:
- 使用WebDriverWait()方法等待页面加载完成,直到下一页按钮可点击。
-
重复步骤1-3,直到获取到所有评论。
下面是修改后的代码示例:
from openpyxl import Workbook
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 创建浏览器对象
options = webdriver.FirefoxOptions()
#浏览器地址
options.binary_location = r'C:\Users\yuxin\AppData\Local\Mozilla Firefox\firefox.exe'
# options.add_argument('--headless')
# options.add_argument('--diable-gpu')
browser = webdriver.Firefox(options=options)
# 打开网站
browser.get('https://you.ctrip.com/sight/dayi3130/71986.html#ctm_ref=www_hp_his_lst')
wb = Workbook()
sheet = wb.active
sheet['A1'] = '内容'
sheet['B1'] = '时间'
page_num = 1
while True:
# 等待下一页按钮可点击
next_button = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.ant-pagination-next > span:nth-child(1)')))
# 获取当前页的所有评论
comments = browser.find_elements(By.XPATH, '/html/body/div[2]/div[2]/div/div[3]/div/div[4]/div[1]/div[4]/div/div[5]/div')
for comment in comments:
content = comment.xpath('.//div[@class="commentDetail"]/text()')[0]
contenttime = comment.xpath('.//div[@class="commentTime"]/text()')[0]
sheet.append([content, contenttime])
# 保存数据
wb.save('./jc6301.xlsx')
# 点击下一页按钮
browser.execute_script('arguments[0].click();', next_button)
page_num += 1
if page_num > 215:
break
# 关闭浏览器
browser.quit()
这样修改后,可以保证每一页的评论都能够加载,并且不会重复获取。
原文地址: https://www.cveoy.top/t/topic/o6Ce 著作权归作者所有。请勿转载和采集!