You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬取TripAdvisor请求极慢,尝试多种方案仍触发read操作超时报错

问题根因

你碰到的超时是反爬拦截导致的,浏览器能正常打开但代码请求失败,核心原因是你的请求没有模拟浏览器特征,被TripAdvisor的反爬系统识别为爬虫,直接拦截了请求。

修复步骤

  1. 修正错误的URL拼接,删掉末尾多余的/robots.txt,#REVIEWS是页面锚点,不需要带到实际请求路径里
  2. 给请求添加浏览器的User-Agent请求头,伪装成正常浏览器访问
  3. 每次请求之间加随机间隔,避免触发频率限制
  4. 优先用requests库替代原生urllib,处理请求更灵活,适配反爬场景更方便

可直接运行的修复后代码

import time
import random
import pandas as pd
import requests
from bs4 import BeautifulSoup as bssoup

hotel_reviewnames2 = []
hotel_review2 = []

# 伪装浏览器请求头,可替换为你自己浏览器的实际User-Agent
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

for i in range(7,9):
    urlp1 = 'https://www.tripadvisor.com.ph/Hotel_Review-g298459-d3914035-Reviews-or'
    urlp2 = '-Park_Inn_by_Radisson_Davao-Davao_City_Davao_del_Sur_Province_Mindanao.html'
    realurl = urlp1 + str(i*5) + urlp2
    print(realurl)
    
    resp = requests.get(realurl, headers=headers, timeout=30)
    resp.encoding = 'utf-8'
    soup6 = bssoup(resp.text, 'html.parser')
    
    hotelreviewsDavaonames3 = soup6.find_all('a', class_='ui_header_link bPvDb')
    hotelreviewsDavao3 = soup6.find_all('div', class_='pIRBV _T')
    
    for x in hotelreviewsDavaonames3:
        hotel_reviewnames2.append(x.text.split())
    for y in hotelreviewsDavao3[1::2]:
        hotel_review2.append(y.text.split('\n'))
    
    # 随机等待1-3秒,避免请求太频繁被封
    time.sleep(random.uniform(1,3))

df4 = pd.DataFrame({
    'Reviewer_Name':hotel_reviewnames2,
    'Reviews':hotel_review2
})    
print(df4)

额外注意事项

  • 如果你想要继续用urllib,只需要构造Request对象把headers传进去即可,逻辑和上面一致
  • 如果后续还是出现拦截,可以再加Referer、Accept-Language等其他请求头,和你浏览器实际请求的头保持一致即可
  • 不要短时间内发起大量请求,避免IP被临时封禁

内容的提问来源于stack exchange,提问作者Aurumen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:57:02