You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网页爬取时条目单/双行布局不固定,如何调整枚举循环逻辑?

问题解决方案

你原有逻辑的问题在于使用固定步长的for循环遍历,而条目占行数不固定,索引计算会出现偏移,导致漏爬或者重复爬取。改用手动控制行指针的while循环即可解决该问题。

优化后的逻辑思路

  • 先预获取表格所有行的总数,确定循环边界
  • 初始化行指针从1开始(匹配xpath的索引规则)
  • 每次判断当前指针指向的行属于1行条目还是2行条目:
    • 若为1行条目:处理完成后指针+1
    • 若为2行条目:处理完当前行和下一行的内容后指针+2
  • 循环直到指针超过总行数,即可遍历所有行

优化后代码示例

from selenium.common.exceptions import NoSuchElementException
import requests # 用于发送Telegram消息

# 预获取表格所有行,减少重复DOM查询提升效率
all_rows = browser.find_elements_by_xpath('//*[@id="grdDocumentos"]/tbody/tr')
total_row_count = len(all_rows)
current_line = 1
BOT_TOKEN = "你的Telegram机器人token"
CHAT_ID = "接收消息的聊天ID"

while current_line <= total_row_count:
    try:
        # 沿用你原有逻辑判断是否为2行条目
        is_two_line = bool(browser.find_element_by_xpath(
            f'//*[@id="grdDocumentos"]/tbody/tr[{current_line}]/td'
        ).text)
        
        if is_two_line:
            # 提取2行条目的内容,可根据需求拼接两行的字段
            empresa = browser.find_element_by_xpath(
                f'//*[@id="grdDocumentos"]/tbody/tr[{current_line}]/td[2]'
            ).text
            # 如需提取第二行内容可补充对应xpath逻辑
            # sub_content = browser.find_element_by_xpath(f'//*[@id="grdDocumentos"]/tbody/tr[{current_line+1}]/td').text
            current_line += 2
        else:
            # 提取1行条目的内容
            empresa = browser.find_element_by_xpath(
                f'//*[@id="grdDocumentos"]/tbody/tr[{current_line}]/td[2]'
            ).text
            current_line += 1

        # 直接发送到Telegram
        requests.post(
            url=f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
            data={"chat_id": CHAT_ID, "text": empresa}
        )
    except NoSuchElementException:
        # 捕获元素不存在的异常,跳过异常行避免程序崩溃
        current_line += 1
        continue

其他优化建议

  • 不要使用裸except,指定捕获NoSuchElementException可避免掩盖代码其他逻辑错误
  • 预获取所有行元素可减少Selenium重复查询DOM的次数,提升爬取效率同时降低元素定位失败概率
  • 发送Telegram消息时可对特殊字符做转义处理,避免接口调用失败

内容的提问来源于stack exchange,提问作者Frantiescoli Dimer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:06:04