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

使用urllib与BeautifulSoup爬取维基百科页面时部分元素缺失的问题咨询

urllib与BeautifulSoup爬取维基百科页面时部分元素缺失的问题咨询

嘿,我来帮你捋捋这个问题哈~

你遇到的元素缺失情况,大概率是因为动态内容渲染的原因:

  • urllib只是简单地获取了页面的初始静态HTML源码,它不会执行页面里的JavaScript代码;
  • 你提到的那些缺失的元素(比如带特定ID的div、style标签),很可能是页面加载完成后,通过JavaScript动态生成并添加到DOM里的,所以静态爬取自然拿不到这些内容。

给你两个实用的解决方案:

方案一:用Selenium模拟浏览器渲染

Selenium可以模拟真实浏览器的行为,会自动执行页面的JS,能获取到完全渲染后的页面内容。示例代码如下:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

# 初始化Chrome浏览器(需要提前安装对应版本的chromedriver)
driver = webdriver.Chrome()
driver.get('https://en.wikipedia.org/wiki/Guitar')

# 给页面留一点时间加载动态内容
time.sleep(2)

# 获取渲染完成后的页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')

# 现在尝试查找你需要的元素
target_element = soup.find(id="w112021")
print(target_element)

# 记得用完关闭浏览器
driver.quit()

方案二:用requests-html轻量处理JS渲染

如果你不想装浏览器驱动,可以试试requests-html库,它内置了JS渲染功能,用法更简洁:

from requests_html import HTMLSession
from bs4 import BeautifulSoup

session = HTMLSession()
# 请求页面
r = session.get('https://en.wikipedia.org/wiki/Guitar')
# 执行页面JS,渲染动态内容
r.html.render()

# 解析渲染后的源码
soup = BeautifulSoup(r.html.html, 'html.parser')
# 查找目标元素
print(soup.find(id="w112021"))

另外提一句,维基百科有官方的MediaWiki API,如果你的需求是获取页面特定内容,直接调用API会更稳定高效,不过要是你就是需要爬取页面的DOM结构,上面的两种JS渲染方法就足够解决问题啦~

备注:内容来源于stack exchange,提问作者Frenom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:27:43