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

如何使用bs4与requests爬取::before伪选择器内的元素内容

问题原因分析
  • ::before和::after属于CSS渲染生成的伪元素,不存在于原始HTML的DOM结构中,requests请求拿到的静态源码里完全没有这部分内容,BeautifulSoup只能解析静态DOM,自然无法直接抓取。
  • 你要获取的浏览量数据本身是前端JS异步请求接口后动态渲染到页面的,你请求的静态页面源码里根本没有对应数值,这才是拿不到数据的核心原因,和伪元素没有直接关系。
  • 你当前编写的代码中website_base字符串存在两处多余的空格,请求的URL本身就是错误的,也会导致返回内容不符合预期。
最优解决方案:直接调用后台API获取数据

该站点的浏览量数据有公开的API接口,直接请求接口解析JSON即可,不需要爬取前端页面,性能更高也更稳定,实现代码如下:

import requests

# 接口参数可根据需求调整,此处为获取全时间段的月度浏览量统计
api_url = "https://pageviews.toolforge.org/metrics/pageviews/per-article/de.wikipedia.org/all-access/user/Michael_ten_Hompel/monthly/20150701/20991231"
headers = {
    "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"
}

resp = requests.get(api_url, headers=headers)
data = resp.json()

# 累加每个月的浏览量得到总数值
total_views = sum(item['views'] for item in data['items'])
print(f"总页面浏览量:{total_views}")

# 如需各月份明细可直接遍历items字段
for month_item in data['items']:
    print(f"{month_item['timestamp'][:6]}: {month_item['views']}次")
备选方案:浏览器渲染工具获取前端内容

如果你确实需要获取页面渲染后的伪元素内容,可以用Selenium模拟浏览器加载页面,等JS渲染完成后再提取内容,伪元素的content属性可以通过执行JS脚本获取,实现代码如下:

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

# 初始化Chrome浏览器,需提前配置对应版本的ChromeDriver
driver = webdriver.Chrome()
driver.get("https://pageviews.toolforge.org/?project=de.wikipedia.org&platform=all-access&agent=user&redirects=0&range=all-time&pages=Michael_ten_Hompel")

# 等待图表区域加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "chart-legend"))
)

# 直接获取渲染后的总浏览量数值
total_ele = driver.find_element(By.CSS_SELECTOR, ".chart-legend .total-count")
print("总浏览量:", total_ele.text)

# 如需获取伪元素的content属性可使用如下JS方法
# before_content = driver.execute_script('return window.getComputedStyle(document.querySelector("目标元素选择器"), "::before").getPropertyValue("content")')
# print("::before内容:", before_content)

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 12:15:03