为什么爬取携程的评论结果很多有大量重复的如何检查页面内容是否加载完成:可以通过判断页面内容是否完全加载完成再进行下一步操作避免爬取到未加载完成的重复评论。代码如下:from openpyxl import Workbookload_workbookfrom seleniumwebdrivercommonby import Byfrom selenium import webdriverimport
爬取携程的评论结果中有大量重复的原因可能是因为网页使用了异步加载的方式,即部分内容是通过JavaScript动态加载的。爬虫在爬取页面时可能会遇到页面还未完全加载完成就开始解析的情况,导致重复的内容被爬取多次。
要检查页面内容是否加载完成,可以通过以下方法:
-
使用selenium的WebDriverWait类等待页面元素的出现或消失。可以等待某个特定的元素出现,表示页面内容已经加载完成。
-
判断页面的加载状态。可以使用selenium的ExpectedConditions类中的方法,如presence_of_element_located()、visibility_of_element_located()等,判断页面元素是否存在或可见,从而判断页面内容是否加载完成。
-
使用JavaScript代码检查页面的加载状态。可以通过执行JavaScript代码,判断页面的加载状态,例如通过判断document.readyState是否为complete,来确定页面内容是否加载完成。
在代码中,可以在每次解析页面内容之前,使用以上方法来判断页面内容是否加载完成。只有当页面内容加载完成后,才进行下一步的操作,避免爬取到未加载完成的重复评论。
以下是修改后的代码示例:
from openpyxl import Workbook, load_workbook
from selenium.webdriver.common.by import By
from selenium import webdriver
import re
import time
from lxml import etree
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")
wb = Workbook()
sheet = wb.active
sheet["A1"] = "内容"
sheet["B1"] = "时间"
page_num = 1
while page_num <= 210:
# 等待页面内容加载完成
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[2]/div[2]/div/div[3]/div/div[4]/div[1]/div[4]/div/div[5]/div')))
page_source = browser.page_source
tree = etree.HTML(page_source)
div_list = tree.xpath('/html/body/div[2]/div[2]/div/div[3]/div/div[4]/div[1]/div[4]/div/div[5]/div')
for div in div_list:
content = div.xpath('.//div[@class="commentDetail"]/text()')[0]
contenttime = div.xpath('.//div[@class="commentTime"]/text()')[0]
sheet.append([content, contenttime])
wb.save("./jc630.xlsx")
page_num += 1
try:
button = browser.find_element(By.CSS_SELECTOR, value='.ant-pagination-next > span:nth-child(1)')
button.click()
time.sleep(0.3)
except:
break
browser.quit()
``
原文地址: http://www.cveoy.top/t/topic/hDIq 著作权归作者所有。请勿转载和采集!