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

如何用Python的BeautifulSoup(BS4)抓取同class div下首个span内容?

使用BeautifulSoup抓取指定div下第一个span的内容

你的代码逻辑本身是正确的,未成功大概率是请求网页时的问题(比如被反爬拦截),或者可以优化写法提升稳定性。以下是修正和优化后的方案:

1. 解决请求问题并优化代码

很多网站会拦截无请求头的爬虫请求,添加User-Agent模拟浏览器访问即可解决。同时用循环遍历替代硬编码索引,适配元素数量变化:

import requests
from bs4 import BeautifulSoup

url = "你的目标网页URL"
# 添加请求头模拟浏览器
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

# 发送请求并检查状态
response = requests.get(url, headers=headers)
if response.status_code == 200:
    soup = BeautifulSoup(response.content, 'html.parser')
    # 获取所有class为networkstat的div
    stat_divs = soup.find_all("div", class_="networkstat")
    # 遍历每个div,提取第一个span的文本
    for div in stat_divs:
        value = div.find("span").get_text().strip()
        print(value)
else:
    print(f"请求失败,状态码:{response.status_code}")

2. 更简洁的CSS选择器写法

可以直接用CSS选择器定位每个networkstat下的第一个span,代码更简洁:

import requests
from bs4 import BeautifulSoup

url = "你的目标网页URL"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

response = requests.get(url, headers=headers)
if response.status_code == 200:
    soup = BeautifulSoup(response.content, 'html.parser')
    # 直接选中每个networkstat下的第一个span
    target_spans = soup.select("div.networkstat span:first-of-type")
    for span in target_spans:
        print(span.get_text().strip())
else:
    print(f"请求失败,状态码:{response.status_code}")

排查要点

  • 先打印response.text确认是否获取到了目标HTML内容,如果内容为空或不是目标页面,说明请求被拦截,需要调整请求头(比如添加Cookie、Referer等)
  • 确认网页不是动态渲染(如果是React/Vue等动态页面,需要用Selenium或Playwright抓取渲染后的内容)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:55:20