← 返回博客

为什么URL中的过滤器和排序会产生页面重复并消耗解析器的限制

我们分析了为什么URL参数(过滤器、排序、UTM)将一个目录变成数千个重复项,以及这如何影响代理预算和市场解析速度。

📅2026年10月22日

在Wildberries或Ozon上启动爬虫,设置代理,但一个小时后就遇到了限制并得到了大量被禁用的IP——尽管只收集了几千个商品卡片?问题几乎总是一个:URL参数。过滤器、排序、分页和UTM标签将一个目录变成数以万计的技术重复,爬虫诚实地遍历它们所有,而不是收集独特的数据。

什么是由于URL参数导致的页面重复

页面重复是指一个URL在技术上与另一个不同,但内容返回的是相同或几乎相同的内容。经典例子:Wildberries上的连衣裙目录可以通过地址/catalog/zhenshchinam/odezhda/platya访问,但同样的结果,按价格排序后,变成了/catalog/zhenshchinam/odezhda/platya?sort=price。添加按大小、品牌、颜色、价格范围的过滤器——最终得到数百种参数组合,每一种都是形式上独特的URL。

对于活生生的用户来说,这很方便:选择过滤器——看到所需商品。但对于按照模式遍历链接或跟随分页的爬虫来说,每种组合都是需要加载、解析和保存的单独页面。如果不设定规则,机器人将“陷入”无尽的过滤器漩涡:按价格排序→按品牌过滤→按大小过滤→再次排序,但顺序不同。独特的URL数量呈指数增长,而其中有用的数据并没有增加——这些只是商品卡片,顺序不同或数据集缩减而已。

另一类重复是UTM标签和会话参数(utm_source、clid、_openstat)。它们对页面内容没有影响,但如果爬虫从网站的其他页面收集链接,保持原样,它将多次拉取同一商品卡片,地址中带有不同的尾部。

为什么这对爬虫来说至关重要

对于SEO专家来说,页面重复是索引和权重稀释的问题。对于那些为了监控价格或收集产品而爬取市场的人来说,重复是直接的金钱和时间损失,而且是同时在三个方向上。

首先,每次加载重复页面都是通过代理的请求。如果您使用付费轮换代理(而在绕过Wildberries和Ozon的保护时,离不开它们),那么您也要为无用请求支付流量。在数以万计的商品卡片的规模下,多出的30-40%的重复请求显著增加了开销。

其次,收集速度大幅下降。如果您的爬虫物理上可以每秒发出10个请求,而其中三分之一用于相同数据的页面,那么实际收集独特内容的速度降至每秒6-7个卡片。在大型目录中,这意味着收集一个小时和半天之间的差异。

第三,最痛苦的是——IP被封的风险与请求数量成正比。市场的反机器人系统会计算来自同一地址的请求频率。如果您发出的请求是收集目标数据所需的三倍,您将三倍更快地耗尽代理的“信任额度”,并受到验证码或封锁的影响。

真实案例:Wildberries, Ozon, Авито

在Wildberries上,同一个目录可以通过参数?sort=popular、?sort=rate、?sort=newly返回,加上过滤器fbrand、fsize、priceU。如果爬虫按“卡片→类似商品→再次卡片”收集链接,它很容易生成带有所有这些参数组合的URL,尽管商品集合内部有90%的重叠。

在Ozon上,类似的故事发生在参数?sorting=和商品特征过滤器上——组合更多,因为每个类别都有自己的一组过滤器(材料、容量、颜色等)。

在Авито上,单独的痛苦是地理位置和搜索半径参数(?radius=、?district=)。同一条广告可能会在不同的参数组合中“浮现”在结果中,而天真的爬虫会将其视为不同的发现,膨胀重复记录的数据库。

重复如何消耗代理预算和时间

让我们通过一个假设的例子来计算。假设某个类别有500个独特商品,但由于8种排序选项和12种流行过滤器组合,爬虫在没有URL规范化的情况下遍历的不是500,而是4000-5000个带有列表的页面,加上对同一商品卡片的重复访问。如果通过居民代理的一个请求成本为一个单位流量,那么在天真的遍历中,您花费的费用是获取同样数量独特数据所需的8-10倍。

更糟糕的是,从同一IP对类似URL的重复请求是反机器人系统的典型模式。请求的频率和单一性越高,保护机制触发的速度就越快。结果形成了一个恶性循环:重复增加请求数量→增加代理池的负担→IP被更快封禁→需要更频繁地更换代理和重启收集→最终的爬取时间和成本进一步增加。

实际上,这样的情况是:卖家希望每天监控Wildberries上200个竞争对手的价格,但由于未清理的URL,他的脚本发出15,000个请求,而不是2,000个,碰到了代理池的限制,晚上而不是早上得到了不完整的数据。

如何在启动爬虫前发现重复

在扩大收集规模之前,花一个小时分析目标网站的URL结构是值得的。以下是实际的操作步骤:

  1. 在浏览器中打开目标目录,手动遍历过滤器和排序——记录在地址栏中出现的参数。
  2. 检查在添加不影响结果的参数(例如,UTM标签)时,页面内容是否发生变化——如果内容相同,则在收集时需要忽略该参数。
  3. 查看页面源代码中的rel="canonical"——网站通常会提示哪个URL被视为重复选项的“主要”URL。
  4. 收集100-200个URL的小测试样本,并通过关键参数进行简单的去重——查看列表会缩短多少。
  5. 检查robots.txt——有时那里已经为参数化URL列出了Disallow指令,这也是哪些参数被视为“垃圾”的提示。

URL规范化:规则和示例

规范化是将URL转换为统一的规范形式,然后决定是否需要遍历它。基本原则是:提取“重要”参数(例如,分页号码或类别),并丢弃“无关”参数(排序、UTM、会话标识符)。

对于类似Wildberries目录的规范化规则的实际示例:

import urllib.parse as up

IGNORED_PARAMS = {"sort", "utm_source", "utm_medium", "utm_campaign", "clid", "_openstat"}

def normalize_url(url: str) -> str:
    parsed = up.urlparse(url)
    query = up.parse_qsl(parsed.query)
    # 只保留重要参数,丢弃其余
    filtered = [(k, v) for k, v in query if k not in IGNORED_PARAMS]
    filtered.sort()  # 将参数顺序统一
    new_query = up.urlencode(filtered)
    return up.urlunparse(parsed._replace(query=new_query))
  

经过规范化后,同一商品的所有不同排序选项将合并为一个URL。在通过代理发送请求之前,爬虫会检查该规范化地址是否已经出现过——如果是,则跳过它。这是减少请求数量而不损失数据完整性的最便宜的方法。

对于不复杂的情况,可以通过爬虫工具的设置实现相同的逻辑:指定“忽略参数”并列出列表,或者设置正则表达式以在问号后截断URL的尾部,如果参数对您的任务没有重要信息。

设置爬虫以忽略参数

大多数用于从市场收集数据的现成解决方案和爬虫构建器支持在项目设置中排除URL参数的规则。以下是首先需要检查和设置的内容:

  • 忽略参数列表。 将在分析阶段发现的所有排序、UTM标签和会话标识符添加到其中。
  • 基于规范化URL的去重。 许多爬虫存储已访问地址的列表——重要的是比较基于规范化版本,而不是原始字符串。
  • 限制过滤器的遍历深度。 如果任务是收集类别的产品,进行一次没有排序和过滤的“基本”遍历就足够了,而不是递归遍历所有组合。
  • 优先考虑分页而非过滤器。 如果网站通过分页导航提供完整的商品列表,通常这就足够了——单独遍历同一列表并应用过滤器是多余的。

在这样的设置之后,请求量通常会减少3-6倍,具体取决于源网站目录的“参数化”程度。

在爬取规模化时代理的角色

即使在完美的URL规范化之后,爬取大型Wildberries或Ozon目录仍然需要在多个IP地址之间分配请求——否则反机器人保护会迅速跟踪到来自单一来源的异常活动。在这里,正确选择代理类型以适应任务非常重要。

对于大规模收集商品卡片和监控价格,重要的是在合理成本下的数量和速度,通常足够使用数据中心代理——它们比居民代理更快且更便宜,这在每天数百万请求的情况下至关重要。但如果网站的保护系统积极封禁数据中心的IP范围,则应切换到居民代理,它们看起来像来自真实提供商的普通用户,更不容易引起怀疑。

对于特定任务——例如,检查特定商品在特定地区的移动设备上显示的价格——移动代理将非常有用,它们模拟通过移动运营商的连接,几乎从不被大量封禁。

重要的是要理解:正确选择代理并不能替代URL规范化,而是对其的补充。没有去重,您只会更快地耗尽即使是最优质的IP地址池。首先减少无用请求的数量,然后通过轮换代理扩展剩余请求——正是这种顺序可以实现最大的节省。

启动数据收集前的检查清单

在将爬虫投入实际规模之前,走一遍简短的检查列表:

检查项 为什么需要
已识别的排序和过滤器参数列表 了解哪些URL可以视为重复
已设置URL规范化规则 将重复合并为一个规范地址
已启用基于规范化URL的去重 排除重复加载相同数据
代理类型根据数量和保护的激进性进行选择 降低被封禁的风险并加快收集速度
IP请求限制设置有余量 避免代理池的大规模封禁

结论

URL中的过滤器、排序和服务参数不仅仅是技术细节,而是爬取市场时无用流量的主要来源之一。没有URL规范化,爬虫可能会发出5-10倍于获取相同数据所需的请求,这直接影响代理预算、收集速度和封锁风险。

解决方案在表述上很简单,但在准备阶段需要纪律:分析目标网站的URL结构,确定哪些参数影响内容,哪些不影响,设置基于规范化地址的去重,然后再通过代理轮换扩大收集。如果您的任务是稳定地监控Wildberries、Ozon或Авито上的价格和产品,建议从居民代理开始——它们在反机器人系统的信任度和特定任务的灵活性之间提供了最佳平衡。