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

HBR异步加载动态网页爬取失效,请求修复指导

修复HBR爬虫的解决方案

问题分析

HBR当前页面内容大概率是通过JavaScript动态渲染的,直接用requests获取的静态HTML仅包含初始骨架内容(也就是你看到的第一个<p>标签),剩余内容需要浏览器执行JS后才会插入DOM。你没找到异步API,说明内容可能是通过内联JS或其他客户端逻辑生成的。

具体修复方案

1. 使用浏览器自动化工具(推荐)

用Selenium或Playwright模拟真实浏览器加载页面,等待JS执行完成后再抓取内容。

示例代码(Selenium)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://hbr.org/2023/08/mastering-the-art-of-the-request'
# 初始化Chrome浏览器(需提前安装对应版本的ChromeDriver)
driver = webdriver.Chrome()
driver.get(url)

# 等待文章内容加载完成,最多等待10秒
try:
    # 等待目标容器出现
    article_body = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "article-body"))
    )
    # 获取所有<p>标签的HTML内容
    paragraphs = article_body.find_elements(By.TAG_NAME, "p")
    art = [p.get_attribute('outerHTML') for p in paragraphs]
finally:
    driver.quit()

print(art)

示例代码(Playwright)

from playwright.sync_api import sync_playwright

url = 'https://hbr.org/2023/08/mastering-the-art-of-the-request'

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto(url)
    # 等待文章容器加载完成
    page.wait_for_selector('.article-body')
    # 获取所有<p>标签的HTML
    art_elements = page.query_selector_all('.article-body p')
    art = [elem.inner_html() for elem in art_elements]
    browser.close()

print(art)

2. 检查并更新DOM选择器

HBR可能修改了文章容器的类名,你可以通过浏览器开发者工具(F12)确认:

  • 定位文章正文的父容器,查看其class或属性是否变更
  • 比如当前容器类名可能改为article-body__content,需要同步更新XPath/CSS选择器

3. 补充完整请求头

HBR的反爬机制可能验证了更多请求头字段,除User-Agent外,可补充以下字段:

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.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",
    "Referer": "https://hbr.org/",
    "Connection": "keep-alive"
}

注意:若需要登录才能查看完整内容,需从浏览器真实请求中复制Cookie字段添加到headers。

注意事项

  • 频繁爬取易触发反爬,建议添加请求间隔(如time.sleep(2))
  • 严格遵守HBR的robots.txt规则,避免违规爬取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:15:25