如何让requests.get(url)与driver.get(url)返回相同输出?
解决requests.get与driver.get输出不一致的问题
差异原因
requests.get()仅获取服务器返回的初始静态HTML,不会执行页面中的JavaScript代码;而Chrome Driver会模拟真实浏览器,加载页面并执行JS,渲染出包含动态加载内容的最终页面。你访问的日本气象厅预警页面,核心内容大概率是通过JS异步加载的,因此两者输出不同。
可行解决方案
方法1:使用支持JS渲染的requests扩展库
可以用requests-html(requests的扩展库,内置无头浏览器)直接获取渲染后的页面,用法接近原生requests:
from requests_html import HTMLSession from bs4 import BeautifulSoup url = 'https://www.jma.go.jp/bosai/warning/#lang=en' session = HTMLSession() # 发送请求并执行页面JS response = session.get(url) response.html.render() # 解析渲染后的HTML soup = BeautifulSoup(response.html.html, 'html.parser') print(soup)
安装依赖:
pip install requests-html
方法2:直接调用动态数据接口
打开浏览器开发者工具(F12),切换到「Network」标签刷新页面,找到加载预警内容的XHR/fetch请求,复制其接口地址和请求参数,用requests直接调用该接口获取原始数据(通常是JSON格式),这种方式效率更高,无需渲染整个页面。
额外注意
如果遇到反爬拦截,需要在requests请求中添加模拟浏览器的请求头(比如User-Agent、Cookie等),可以从Chrome的Network请求详情中复制这些信息,加到requests.get()的headers参数里。
内容的提问来源于stack exchange,提问作者gaurav12
相关产品推荐
相关产品推荐

