网页爬取第10页后无法找到表格行标签问题求助
问题排查与解决建议
1. 修正元素选择器
你当前用html.find_all('tr', id='row_')查找表格行,但实际页面中表格行的ID是row_加数字后缀(比如row_1001),而非完全等于row_。需改用正则匹配ID前缀:
import re rows = html.find_all('tr', id=re.compile(r'^row_'))
2. 添加请求头绕过反爬
网站可能通过请求头识别爬虫,空请求头会导致第11页及以后返回异常内容。需模拟浏览器请求头,至少添加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', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5' } # 发起请求时带上headers res = requests.get(rankings_url, headers=headers, timeout=30, allow_redirects=True)
3. 验证请求响应内容
先打印请求的状态码和响应文本片段,确认是否拿到了正常页面:
print(f"Status Code: {res.status_code}") print(res.text[:500]) # 打印前500字符,判断是否为目标页面
如果返回反爬验证页面(含验证码、登录提示等),还需:
- 添加请求间隔(比如
time.sleep(2)),避免请求过于频繁 - 使用会话保持(
requests.Session()),模拟浏览器连续会话
4. 检查URL构造是否正确
确认URL_RANKINGS拼接后的第11页URL与浏览器中的一致:
URL_RANKINGS = "https://boardgamegeek.com/browse/boardgame/page/" rankings_url = f'{URL_RANKINGS}{page}' print(rankings_url) # 应输出https://boardgamegeek.com/browse/boardgame/page/11
内容的提问来源于stack exchange,提问作者Tjorriemorrie
相关产品推荐
相关产品推荐

