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

使用urllib抓取网页时无法获取完整HTML脚本问题求助

问题原因

你使用的urllib属于原生静态HTTP请求库,仅能获取服务端首次返回的未经过JS渲染的原始HTML内容,无法执行页面内置的JavaScript逻辑。你要爬取的Naver Cafe搜索页是*单页应用(SPA)*架构,所有商品的subject_text、price等内容都是JS动态请求接口后渲染到页面的,静态HTML中不存在这些内容,因此会返回要求开启JS的noscript提示。该报错和本地浏览器的JS开关状态无关,浏览器访问时会自动执行JS完成渲染,而urllib不具备这个能力。

可行解决方案

方案1:使用无头浏览器模拟真实访问环境

使用Selenium、Playwright这类支持无头浏览器的工具,模拟真实浏览器运行逻辑,等待JS执行完成后再提取页面元素,Selenium示例代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

# 配置无头模式(不弹出浏览器窗口)
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")

driver = webdriver.Chrome(options=chrome_options)
target_url = 'https://section.cafe.naver.com/ca-fe/home/search/c-articles?q=%EB%A1%A4%EB%9E%9C%EB%93%9C&ss=ON_SALE'
driver.get(target_url)
# 等待3秒确保页面内容渲染完成,也可以用显式等待指定元素加载
time.sleep(3)
# 获取渲染后的完整HTML内容
rendered_html = driver.page_source
print(rendered_html)
# 后续可直接通过driver的元素定位方法提取subject_text、price类对应内容
driver.quit()

方案2:直接抓取后端数据接口(效率最高)

无需渲染页面,直接获取结构化JSON数据:

  • 打开Chrome浏览器访问目标页面,按F12打开开发者工具,切换到「网络」标签,筛选「Fetch/XHR」类型的请求
  • 刷新页面后在请求列表中找到返回商品列表数据的接口,返回结果为JSON格式,直接包含你需要的标题、价格等字段
  • 对该接口直接发起HTTP请求,解析JSON即可拿到目标数据,不需要额外解析HTML

方案3:使用轻量动态渲染库requests-html

比无头浏览器更轻量化,内置JS渲染能力:

from requests_html import HTMLSession

session = HTMLSession()
target_url = 'https://section.cafe.naver.com/ca-fe/home/search/c-articles?q=%EB%A1%A4%EB%9E%9C%EB%93%9C&ss=ON_SALE'
resp = session.get(target_url)
# 执行JS渲染,等待1秒确保内容加载完成
resp.html.render(sleep=1)
rendered_html = resp.html.html
print(rendered_html)

额外注意

  • 发起请求时建议添加正常的User-Agent请求头,避免被站点反爬机制拦截
  • 控制请求频率,不要短时间内发起大量请求,避免触发访问限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:36:00