如何用Selenium/BeautifulSoup获取带data-v属性的div内容?
如何用Selenium或BeautifulSoup获取指定div的文本值
目标HTML代码:
<div data-v-afa58544="" class="pa-0 col col-4"> 0.51 </div>
需要获取其中的0.51,以下是两种工具的实现方案:
BeautifulSoup 解决方案
你的原有代码存在两处问题:
soup.find('div[data-v-afa58544]')是CSS选择器语法,但find方法不支持直接传入这种格式,需改用select_one或通过attrs参数指定属性。- 后续的
select_one('.pa-0 col col-4')写法错误,类选择器需给每个类名前加.,且目标值就在当前div内,无需再选择子元素。
正确实现代码:
from bs4 import BeautifulSoup # 假设html为你获取到的页面源码 html = '''<div data-v-afa58544="" class="pa-0 col col-4"> 0.51 </div>''' soup = BeautifulSoup(html, 'html.parser') # 方式1:通过attrs参数定位元素 target_div = soup.find('div', attrs={'data-v-afa58544': ''}) # 方式2:用CSS选择器定位 target_div = soup.select_one('div[data-v-afa58544=""]') # 获取文本并去除前后空格 result = target_div.get_text(strip=True) print(result) # 输出:0.51
Selenium 解决方案
如果页面是Vue等框架动态渲染的,静态解析可能拿不到元素,这时用Selenium更可靠:
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 driver = webdriver.Chrome() driver.get('你的目标网站URL') # 等待元素加载完成(避免动态渲染导致找不到元素) wait = WebDriverWait(driver, 10) target_div = wait.until(EC.presence_of_element_located( (By.CSS_SELECTOR, 'div[data-v-afa58544=""]') )) # 获取文本并处理 result = target_div.text.strip() print(result) # 输出:0.51 driver.quit()
也可以用XPATH定位:
target_div = wait.until(EC.presence_of_element_located( (By.XPATH, '//div[@data-v-afa58544=""]') ))
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

