如何在Div标签中查找Img及其他组件?附Python代码求解决方案
在Div标签中查找Img元素的解决方案
方案一:基于现有BeautifulSoup代码修改
你已经通过BeautifulSoup获取了所有div标签,只需在遍历每个div时调用find_all('img'),即可提取该div内的所有img元素,修改后的代码如下:
from typing import List from bs4 import BeautifulSoup from selenium import webdriver import time # 启动浏览器 driver = webdriver.Chrome(executable_path="/home/earth/Downloads/Python/chromedriver_linux64 (2)/chromedriver.exe") driver.get("https://demo1.devmarketidiot.com/") driver.maximize_window() time.sleep(2) html = driver.page_source S = BeautifulSoup(html, 'lxml') print("........Divs及内部Img...........") mydivs = S.findAll('div') print(f"共找到 {len(mydivs)} 个div标签") for idx, div in enumerate(mydivs, 1): # 查找当前div内的所有img元素 imgs_in_div = div.find_all('img') if imgs_in_div: print(f"\n第 {idx} 个div内的img元素:") for img in imgs_in_div: # 提取img的src、alt等属性 print(f"src: {img.get('src')}, alt: {img.get('alt')}") else: print(f"\n第 {idx} 个div内无img元素") driver.quit()
关键说明
div.find_all('img')会定位当前div节点下所有层级的img子元素- 用
img.get('属性名')可提取src、alt等img标签的核心属性
方案二:直接用Selenium定位(更高效)
如果无需先获取所有div,可直接通过Selenium的选择器定位div内的img,避免解析整个页面源码,更适合处理动态渲染的内容:
from selenium import webdriver from selenium.webdriver.common.by import By import time driver = webdriver.Chrome(executable_path="/home/earth/Downloads/Python/chromedriver_linux64 (2)/chromedriver.exe") driver.get("https://demo1.devmarketidiot.com/") driver.maximize_window() time.sleep(2) # 方式1:CSS选择器定位所有div下的img all_div_imgs = driver.find_elements(By.CSS_SELECTOR, "div img") # 方式2:XPATH定位所有div下的img(效果一致) # all_div_imgs = driver.find_elements(By.XPATH, "//div//img") print(f"共找到 {len(all_div_imgs)} 个div内的img元素") for img in all_div_imgs: print(f"src: {img.get_attribute('src')}, alt: {img.get_attribute('alt')}") driver.quit()
关键说明
div img(CSS选择器)和//div//img(XPATH)都能匹配所有div内部的img元素- 直接用Selenium操作可处理JS动态加载的img,而BeautifulSoup仅能解析静态页面源码
内容的提问来源于stack exchange,提问作者Pooja Patil
相关产品推荐
相关产品推荐

