爬虫脚本访问Hotels.com评论页URL时自动跳回主页面的问题排查
解决Hotels.com评论页重定向回主页的问题
我之前碰到过类似的Hotels.com页面路由问题,你遇到的核心矛盾在于:评论页的访问依赖当前会话的状态(比如Cookie、页面交互轨迹),直接用driver.get(new_url)重新加载时,丢失了这些关键的会话上下文,网站会判定你没有正常进入评论流程,从而触发重定向回到酒店主页面。
为什么会出现这种情况?
Hotels.com的评论页并不是一个能独立访问的静态页面——它需要验证你是从酒店详情页逐步进入的,或者依赖会话中存储的用户标识、访问记录。当你直接请求评论页URL时,网站检测不到这些验证信息,就会把你重定向回主页面。
最直接的解决方案:不要重新加载评论页
既然你已经通过点击评论按钮进入了评论页,完全不需要调用driver.get(new_url),直接在当前页面开始抓取评论即可。下面是修改后的代码片段,帮你推进抓取流程:
# 点击评论按钮进入评论页后,直接处理当前页面 # 等待评论容器加载完成 wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'div[data-stid="reviews-container"]'))) # 示例:抓取当前页的评论核心内容 reviews_list = driver.find_elements_by_css_selector('div[class="section-review"]') for review in reviews_list: # 提取评论标题 title = review.find_element_by_css_selector('h3[class="section-review-title"]').text # 提取评论正文 content = review.find_element_by_css_selector('p[class="section-review-body"]').text # 提取评分(从aria-label属性获取) rating = review.find_element_by_css_selector('div[class="section-review-stars"]').get_attribute('aria-label') print(f"标题: {title}\n内容: {content}\n评分: {rating}\n---") # 处理分页逻辑(抓取所有评论) while True: try: # 等待"下一页"按钮可点击 next_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a[aria-label="Next page"]'))) next_btn.click() time.sleep(3) # 等待新页面评论加载完成 # 重复抓取当前页评论的逻辑 new_reviews = driver.find_elements_by_css_selector('div[class="section-review"]') for review in new_reviews: # 复用上述提取逻辑即可 pass except Exception as e: print("已加载完所有评论,退出分页循环") break
如果确实需要保存评论页URL后续访问怎么办?
如果因为特殊场景必须保存评论页URL并后续访问,需要确保会话上下文一致:
- 不要关闭当前浏览器会话,直接复用已有的
driver实例访问URL - 或者手动保存当前会话的Cookie,后续重新初始化浏览器时注入这些Cookie:
# 进入评论页后,保存当前会话的Cookie current_cookies = driver.get_cookies() # 后续重新访问时,先打开Hotels.com主站,再注入Cookie,最后访问评论页 driver.get('https://fr.hotels.com/') for cookie in current_cookies: driver.add_cookie(cookie) driver.get(new_url)
不过这种方式不如直接在当前页面处理可靠,因为Hotels.com的Cookie可能存在过期时间或动态验证逻辑。
总结来说:最稳妥的方式就是点击评论按钮后直接在当前页面操作,不要尝试重新加载URL,这样就能彻底避免重定向问题,顺利抓取所有评论内容。
内容的提问来源于stack exchange,提问作者RandallCloud
相关产品推荐
相关产品推荐

