为何BeautifulSoup的select()方法获取Stack Overflow内容返回空列表?
代码返回空列表的原因及解决办法
核心原因1:页面结构已更新
Stack Overflow的页面元素类名已经发生变更,你课程里用的.question-summary类早已被废弃,当前问题列表的卡片元素使用的是s-post-summary类(附带js-post-summary等其他类),所以用旧类名自然选不到任何元素。
核心原因2:请求被反爬机制拦截
requests.get()默认的请求头会被Stack Overflow的反爬系统识别为非浏览器请求,返回的可能是带有验证机制的页面(比如人机验证),而非正常的问题列表页面,导致解析不到目标元素。
修正后的代码示例
import requests from bs4 import BeautifulSoup # 添加模拟浏览器的请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } response = requests.get('https://stackoverflow.com/questions', headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 使用当前页面的正确类名 questions = soup.select('.s-post-summary') print(f"共找到{len(questions)}个问题条目")
内容的提问来源于stack exchange,提问作者Code7G
相关产品推荐
相关产品推荐

