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

Foxtrot站点爬虫分页后筛选参数丢失及按页码翻页实现咨询

解决方案

核心思路

直接从初始带筛选参数的URL中提取查询参数,每次翻页仅修改页码参数,重新拼接成完整URL发起请求,完全不依赖页面分页元素的href属性,避免筛选参数丢失。

实现步骤

  • 第一步:解析初始URL的结构,拆分出域名、路径、查询参数等部分
  • 第二步:固定保留filter、pFilter等筛选参数,仅动态修改page参数的值构造下一页URL
  • 第三步:以当前页是否返回商品卡片作为翻页终止条件,替代原有的下一页按钮存在性判断

代码修改说明

首先导入URL处理模块:

from urllib.parse import urlparse, parse_qs, urlencode, urlunparse
from typing import List, Tuple
from selenium.webdriver import Firefox, Options
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

修改后的parse函数逻辑如下:

def parse(init_url: str) -> List[Tuple[str, str, str]]:
    options = Options()
    options.add_argument('--headless')
    items = []
    driver = Firefox(options=options)
    driver.implicitly_wait(5.5)
    
    # 解析初始URL拆分各组件
    url_parts = list(urlparse(init_url))
    query_params = parse_qs(url_parts[4])
    current_page = 1
    
    try:
        while True:
            # 仅更新页码参数,其余筛选参数保持不变
            query_params['page'] = [str(current_page)]
            # 重新拼接完整请求URL
            url_parts[4] = urlencode(query_params, doseq=True)
            current_url = urlunparse(url_parts)
            print('Load:', current_url)
            driver.get(current_url)
            
            # 修正原选择器错误:原.last-child只会匹配最后一个商品,改为匹配所有商品卡片
            item_els = driver.find_elements(By.CSS_SELECTOR, ".card")
            # 当前页无商品时终止翻页
            if not item_els:
                break
                
            for item_el in item_els:
                try:
                    name = item_el.find_element(By.CSS_SELECTOR, '.card__title').text
                except:
                    name = 'Null'

                try:
                    price = item_el.find_element(By.CSS_SELECTOR, '.card-price').text
                except NoSuchElementException:
                    price = '-'

                try:
                    nal = item_el.find_element(By.CSS_SELECTOR, '.card__buttons').text
                except NoSuchElementException:
                    nal = "-"

                row = name, price, nal
                print(row)
                items.append(row)
            
            current_page += 1
    finally:
        # 补充浏览器进程退出逻辑,避免后台残留
        driver.quit()
    return items

注意事项

  • 传入的初始init_url必须是第一页带完整filter、pFilter筛选参数的URL,确保后续所有分页请求都继承筛选条件
  • 若Foxtrot站点存在单页最大页码限制,可额外添加current_page阈值判断,避免无意义请求

内容的提问来源于stack exchange,提问作者Константин Николаевич Бояр II

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:06:02