如何从网页导出指定div内容至DataFrame?
解决动态网页指定div内容提取问题
问题根源:你用
urllib请求到的只是静态HTML骨架,而bloks.io这类网站的投票数据是通过JavaScript动态加载的,静态页面里根本没有producer-votes-wrapper的实际内容,所以拿到的都是无用文本。方案一:用浏览器自动化工具(推荐Selenium)
先安装依赖包:pip install selenium同时需要下载对应浏览器的驱动(比如ChromeDriver,需和浏览器版本匹配),然后运行以下代码:
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 url = 'https://bloks.io/account/eoseouldotio#votes' # 初始化Chrome浏览器(确保ChromeDriver路径已配置到系统环境) driver = webdriver.Chrome() driver.get(url) # 等待目标div加载完成,最多等待10秒 wait = WebDriverWait(driver, 10) target_div = wait.until(EC.presence_of_element_located((By.ID, 'producer-votes-wrapper'))) # 获取div的完整HTML内容 div_html = target_div.get_attribute('innerHTML') # 若只需要文本内容,用:div_text = target_div.text print(div_html) # 关闭浏览器 driver.quit()方案二:直接调用网站API(更高效)
打开浏览器开发者工具(F12),切换到Network标签刷新页面,可找到加载投票数据的API接口。直接请求该接口能拿到结构化的JSON数据,无需处理HTML:import requests url = 'https://api.bloks.io/v1/account/eoseouldotio/votes' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36' } response = requests.get(url, headers=headers) votes_data = response.json() # 遍历处理投票数据 for item in votes_data.get('votes', []): print(f"生产者账号:{item['producer']},投票权重:{item['stake']}")
内容的提问来源于stack exchange,提问作者CaptainG
相关产品推荐
相关产品推荐

