📖 知识点
1. 找多个元素:eles ()(复数)
page.eles(选择器) 一次性返回匹配的所有元素列表:
# 找到页面上所有链接
all_links = page.eles("a")
# 找到所有标题类元素
all_titles = page.eles(".title")
print(len(all_links)) # 数一数有几个
对比:
page.ele("a")只返回第一个;page.eles("a")返回全部(列表)。
2. 循环遍历:for + 列表
拿到元素列表后,用 for 循环逐个处理:
# 遍历所有链接,提取文字
for link in page.eles("a"):
text = link.text
if text:
print(text)
3. 常见应用模式
批量抓取列表数据最经典的写法:
# 抓取页面上所有新闻标题
news_list = page.eles(".news-title")
for idx, news in enumerate(news_list, 1):
print(f"{idx}. {news.text}")
enumerate(list, 1):给每个元素自动编号,从 1 开始,方便展示序号。
💡 理解
eles()返回列表,支持len()、for 循环、下标访问- 批量操作常用组合:eles 找一批 → for 遍历 → 逐个提取 text/attr
- 提取到的数据可以存进列表、字典,为后面保存到文件打基础
⚠️ 易错提醒
eles()返回空列表时,for 循环不会执行,不会报错,但可能没数据- 记得先判断列表是否为空(
if not data:)再处理- 遍历时每个元素仍可单独用
.text/.attr()/.click()
⚔️ Kata 实战任务
任务需求:
- 导入 ChromiumPage,访问百度
- 用
page.eles("a")一次性找到页面所有链接元素 - 打印找到的链接总数
- 用 for 循环遍历,提取每个链接的文字,跳过空文字,打印带序号的清单
参考代码
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get("https://www.baidu.com")
# 批量搜寻咒:一次性找所有链接
all_links = page.eles("a")
print(f"🎯 页面上共有 {len(all_links)} 个链接")
# 循环咒:遍历并提取文字
print("===== 链接文字清单 =====")
for idx, link in enumerate(all_links, 1):
text = link.text
if text: # 跳过空文字
print(f"{idx}. {text}")
运行输出(内容以实际为准,示意):
🎯 页面上共有 68 个链接
===== 链接文字清单 =====
1. 新闻
2. hao123
3. 地图
4. 贴吧
5. 更多
...
🧠 思考题
page.ele("a")和page.eles("a")返回类型有什么不同?各自返回几个元素?- 如果要抓取页面上某类商品卡片的标题和价格,思路是什么?用循环怎么写?