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

如何避免在分类页面爬取中抓取不存在的空页面?

避免爬虫抓取不存在页面的解决方案

你的问题核心是硬编码了固定的页面范围(1-14),但不同分类实际页面数不同,导致抓取到空页面。可以通过给每个分类绑定对应页面数的方式解决,具体修改如下:

步骤1:用字典存储分类与对应页面数

把原有的分类列表改成字典,直接关联每个分类的总页数:

cate_page = {
    "Services": 1,
    "Food & Beverage": 14,
    "Fashion & Accessories": 4,
    "Electronics & Technology": 2
}

步骤2:修改循环逻辑

遍历字典的键值对,每个分类只循环到它的实际总页数,同时新增空内容判断避免无效处理:

from bs4 import BeautifulSoup
import requests

def parse():
    # 绑定分类与对应总页数
    cate_page = {
        "Services": 1,
        "Food & Beverage": 14,
        "Fashion & Accessories": 4,
        "Electronics & Technology": 2
    }
    url = "https://www.jurongpoint.com.sg/store-directory"

    for cat, max_page in cate_page.items():
        # 仅循环到该分类的实际页数
        for page in range(1, max_page + 1):
            print(f'Scraping category {cat} page {page}')
            payload = {
                'level': '',
                'cate': cat,
                'page': page
            }
            resp = requests.get(url, params=payload)
            soup = BeautifulSoup(resp.text, 'html.parser')

            # 先判断页面是否有有效内容,无内容直接跳过
            names = soup.find_all('tr', class_="clickable")
            if not names:
                print(f'No content for {cat} page {page}, skip')
                continue

            shops = soup.find_all('div', class_="col-9")
            for n, k in zip(names, shops):
                try:
                    name = n.find_all('td')[1].text.replace(' ','')
                    desc = k.text.replace(' ','')
                    print(name + "\n")
                    print(desc)
                except AttributeError as e:
                    print(f'Error processing entry: {e}')

parse()

额外优化说明

  • 新增空内容判断:如果页面找不到目标店铺标签,直接跳过后续处理,减少无效操作
  • 异常捕获细化到单条店铺数据,不会因为某一条数据的问题中断整个页面的抓取

修改后每个分类只会抓取实际存在的页面,不会再出现空页面抓取的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:30:20