如何使用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
相关产品推荐
相关产品推荐

