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

无法使用BeautifulSoup4爬取指定网页标题的技术求助

解决无法爬取BCB网页中“123rd Meeting”标题的问题

我来帮你分析下为啥你的代码拿不到目标标题,以及怎么解决这个问题。

首先,你的代码用urllib.request获取页面后用BeautifulSoup解析,但这个页面是单页应用(SPA),核心内容是通过JavaScript动态渲染出来的。你用urllib拿到的只是服务器返回的初始空壳HTML,里面根本没有“123rd Meeting”这段内容——这些内容是浏览器加载完JS之后才生成的,所以BeautifulSoup自然找不到。

下面给你两种可行的解决方案:

方案一:用支持JS渲染的轻量库(requests-html)

这个库能模拟浏览器加载并渲染JavaScript,拿到完整的页面内容。

  1. 先安装依赖:
pip install requests-html
  1. 然后用下面的代码爬取:
from requests_html import HTMLSession

# 创建会话对象
session = HTMLSession()
target_url = 'https://www.bcb.gov.br/en/#!/c/copomstatements/1724'

# 获取页面并渲染JS(这一步会等待页面加载完成)
page = session.get(target_url)
page.html.render()

# 查找标题元素——你可以先打开浏览器开发者工具,确认标题的选择器
# 比如检查后发现标题在<h1>标签里,用这个选择器查找
title = page.html.find('h1', first=True)

if title:
    print(title.text)  # 应该就能输出"123rd Meeting"了
else:
    print("没找到标题,可能页面结构变了,记得检查下元素选择器")

方案二:直接请求后台API(更高效稳定)

SPA通常会通过API获取数据再渲染页面,你可以直接找到这个API接口,跳过JS渲染步骤:

  1. 打开浏览器,访问目标页面,按F12打开开发者工具,切换到「Network」标签,刷新页面。
  2. 筛选类型为「XHR」的请求,查看每个请求的响应内容,找到包含会议标题的那个API。
  3. 复制该API的URL,用requests直接请求并解析JSON:
import requests

# 替换成你找到的实际API URL
api_url = "https://www.bcb.gov.br/api/xxx/copomstatements/1724"
response = requests.get(api_url)
response.raise_for_status()  # 处理请求错误

data = response.json()
# 根据API返回的JSON结构,提取标题,比如假设标题在data['meetingTitle']里
print(data.get('meetingTitle'))

这个方法比渲染JS更快,也更稳定,推荐优先尝试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:24:10