使用Requests库无法获取高校网站页面响应的技术求助
解决思路与排查方案
嘿,这种情况我之前做校园系统爬虫时也遇到过!状态码200但拿不到预期内容,大概率是服务器的反爬校验或者会话机制在搞鬼,咱们一步步来排查:
先补全请求头,模拟浏览器访问
很多学校网站会校验请求的User-Agent、Referer等头部信息,判断是不是真实浏览器访问。如果你的请求头太简单,服务器可能返回简化版页面或者防爬虫内容。试试加上这些头:import requests 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', 'Referer': 'http://mydy.dypatil.edu/rait/login/' } url = "http://mydy.dypatil.edu/rait/login/index.php?uname=san.yad.rt15@rait.ac.in&wantsurl=" response = requests.get(url, headers=headers) print(response.text)用Session维持会话Cookie
有些系统会在初始登录页设置会话Cookie,即使你直接跳转到密码页,没有携带这个Cookie,服务器会认为你是非法跳转,返回异常内容。用requests.Session()可以自动帮你管理Cookie:import requests session = requests.Session() # 先访问初始登录页面,获取必要的会话Cookie session.get("http://mydy.dypatil.edu/rait/login/") # 再请求带用户名的密码页面 url = "http://mydy.dypatil.edu/rait/login/index.php?uname=san.yad.rt15@rait.ac.in&wantsurl=" response = session.get(url) print(response.text)检查页面是否是JS动态渲染
如果上面两种方法都不行,可能页面内容是通过JavaScript动态加载的。requests只能获取静态HTML源码,拿不到JS渲染后的内容。这时候可以用Selenium模拟真实浏览器加载页面:from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument('--headless=new') # 无头模式,不弹出浏览器窗口 driver = webdriver.Chrome(options=options) url = "http://mydy.dypatil.edu/rait/login/index.php?uname=san.yad.rt15@rait.ac.in&wantsurl=" driver.get(url) print(driver.page_source) # 这里能拿到完整的渲染后内容 driver.quit()先看完整的响应内容
你可以先直接打印response.text(而不是tree.text),看看返回的HTML里有没有隐藏的错误提示,比如“请从正常入口登录”之类的,或者有没有meta标签重定向的情况——有时候状态码200,但页面实际会自动跳转到其他页面。
先从前面两个方法试起,这是最常见的问题。如果还是不行,把返回的HTML片段贴出来,咱们再进一步分析~
内容的提问来源于stack exchange,提问作者gochi
相关产品推荐
相关产品推荐

