专业编程基础技术教程

网站首页 > 基础教程 正文

豆包用的大型与DeepSeek大型实际生成代码哪家强

ccvgpt 2025-06-10 13:30:14 基础教程 7 ℃

在用python代码测试一个抓取12306班次信息时用豆包生成测试的代码,大体上可以运行解析到数据,后面想做一下升级让他解所有的座位信息。经过多轮的调整解析的数据还是错乱的,后来把豆包生成的代码让DeepSeek来修改下,DeepSeek一下找到症结所在,并给出了调整后的代码,其实调整的代码并不多,果然DeepSeek在思维推理在一些方面果然有一些优势。

DeepSeek排查到引起问题的原因:

豆包用的大型与DeepSeek大型实际生成代码哪家强


不过豆包的大模型也不啦,把deepseek的代码给他后,他也反应过来了哈哈


下面来看看他们两代码有什么差异。

豆包生成的:

def _parse_ticket_data(self):
    """高精度解析余票数据,修正座位索引映射"""
    try:
        table = self._safe_find(By.ID, 'queryLeftTable')
        if not table:
            return []

        trains = []
        for row in self._safe_find(
                By.CSS_SELECTOR,
                "#queryLeftTable tbody tr[id^='ticket_']",
                multiple=True
        ):
            try:
                # 提取车次信息
                train_info = row.find_element(By.CSS_SELECTOR, '.train-no')
                train_number = train_info.text.strip()

                # 提取车站信息
                stations = row.find_elements(By.CSS_SELECTOR, '.cdz strong')
                departure_station = stations[0].text if len(stations) > 0 else "未知"
                arrival_station = stations[1].text if len(stations) > 1 else "未知"

                # 提取时间信息
                times = row.find_elements(By.CSS_SELECTOR, '.cds strong')
                departure_time = times[0].text if len(times) > 0 else "未知"
                arrival_time = times[1].text if len(times) > 1 else "未知"

                # 提取历时信息
                duration = row.find_element(By.CSS_SELECTOR, '.ls strong').text.strip()

                # 跳过前4个非座位TD,从第5个开始解析座位
                seats = row.find_elements(By.CSS_SELECTOR, 'td[width="46"], td[width="80"]')[4:]

                # 定义座位类型和映射关系
                seat_types = [
                    '商务座', '优选一等', '一等座', '二等座', '高级软卧',
                    '软卧', '硬卧', '软座', '硬座', '无座', '其他'
                ]
                seat_info = {st: '--' for st in seat_types}

                # 动态映射座位索引(根据实际数据调整)
                seat_mapping = {
                    0: '商务座',  # 对应HTML中的特等座/商务座
                    1: '优选一等',  # 对应HTML中的优选一等座
                    2: '一等座',  # 对应HTML中的一等座
                    3: '二等座',  # 对应HTML中的二等座
                    4: '高级软卧',  # 对应HTML中的高级软卧
                    5: '软卧',  # 对应HTML中的软卧
                    6: '硬卧',  # 对应HTML中的硬卧
                    7: '软座',  # 对应HTML中的软座
                    8: '硬座',  # 对应HTML中的硬座
                    9: '无座',  # 对应HTML中的无座
                    10: '其他',  # 对应HTML中的其他座位类型
                }

                # 解析座位信息
                for idx, seat_td in enumerate(seats):
                    if idx >= len(seat_mapping):  # 防止越界
                        break
                    seat_type = seat_mapping[idx]
                    status = seat_td.text.strip() or '--'
                    seat_info[seat_type] = status

                # 查找预订按钮
                book_button = None
                strategies = [
                    (By.CSS_SELECTOR, 'td.no-br a.btn72'),
                    (By.XPATH, './/td[contains(text(), "预订")]'),
                    (By.CSS_SELECTOR, 'td.no-br[onclick*="book"]'),
                ]
                for by, value in strategies:
                    try:
                        book_button = row.find_element(by, value)
                        break
                    except NoSuchElementException:
                        continue

                # 组装车次数据
                train_data = {
                    '车次': train_number,
                    '出发站': departure_station,
                    '到达站': arrival_station,
                    '出发时间': departure_time,
                    '到达时间': arrival_time,
                    '历时': duration,
                    **seat_info,
                    'book_button': book_button,
                }

                logging.info(f"成功解析车次 {train_number}: 软卧={seat_info['软卧']}, 硬卧={seat_info['硬卧']}")
                trains.append(train_data)

            except Exception as e:
                logging.error(f"解析车次数据失败: {str(e)}")
                continue

        return trains

    except Exception as e:
        logging.error(f"解析余票数据异常: {str(e)}")
        return []



DeepSeek生成的:

def _parse_ticket_data(self):
    """高精度解析余票数据"""
    try:
        table = self._safe_find(By.ID, 't-list')
        if not table:
            return []

        trains = []
        for row in self._safe_find(
                By.CSS_SELECTOR,
                "#t-list tbody tr[id^='ticket_']",
                multiple=True
        ):
            try:
                # 提取车次信息(保持不变)
                train_info = row.find_element(By.CSS_SELECTOR, '.ticket-info')
                train_number = train_info.find_element(By.CSS_SELECTOR, '.number').text

                # 提取车站信息(保持不变)
                stations = train_info.find_elements(By.CSS_SELECTOR, '.cdz strong')
                departure_station = stations[0].text if len(stations) > 0 else "未知"
                arrival_station = stations[1].text if len(stations) > 1 else "未知"

                # 提取时间信息(保持不变)
                times = train_info.find_elements(By.CSS_SELECTOR, '.cds strong')
                departure_time = times[0].text if len(times) > 0 else "未知"
                arrival_time = times[1].text if len(times) > 1 else "未知"

                # 提取历时信息(保持不变)
                duration = train_info.find_element(By.CSS_SELECTOR, '.ls strong').text.strip()

                # ------------------- 修改的座位解析部分 -------------------
                # 仅选择宽度为46的座位列(排除最后80宽度的备注列)
                seats = row.find_elements(By.CSS_SELECTOR, 'td[width="46"]')
                logging.info(f"解析车次 {train_number} 的座位信息,共{len(seats)}个座位类型")

                # 定义座位类型顺序(与HTML结构严格对应)
                seat_types = [
                    '商务座', '优选一等', '一等座', '二等座', '高级软卧',
                    '软卧', '硬卧', '软座', '硬座', '无座', '其他'
                ]

                # 初始化座位信息字典
                seat_info = {st: '--' for st in seat_types}

                # 按顺序填充座位余票信息
                for idx, seat_td in enumerate(seats):
                    if idx < len(seat_types):
                        seat_type = seat_types[idx]
                        status = seat_td.text.strip() or '--'  # 处理空值
                        seat_info[seat_type] = status
                    else:
                        break  # 防止索引超出预定义类型范围

                # ------------------- 以下保持不变 -------------------
                # 查找预订按钮(保持不变)
                book_button = None
                strategies = [
                    (By.CSS_SELECTOR, 'td.no-br a.btn72'),
                    (By.XPATH, './/td[contains(text(), "预订")]'),
                    (By.CSS_SELECTOR, 'td.no-br[onclick*="book"]'),
                ]
                for by, value in strategies:
                    try:
                        book_button = row.find_element(by, value)
                        break
                    except NoSuchElementException:
                        continue

                # 组装车次数据(保持不变)
                train_data = {
                    '车次': train_number,
                    '出发站': departure_station,
                    '到达站': arrival_station,
                    '出发时间': departure_time,
                    '到达时间': arrival_time,
                    '历时': duration,
                    **seat_info,
                    'book_button': book_button,
                }

                logging.info(f"成功解析车次 {train_number}: 商务座={seat_info['商务座']}, 无座={seat_info['无座']}")
                trains.append(train_data)

            except Exception as e:
                logging.error(f"解析车次数据失败: {str(e)}")
                continue

        return trains

    except Exception as e:
        logging.error(f"解析余票数据异常: {str(e)}")
        return []

Tags:

最近发表
标签列表