如何避免在分类页面爬取中抓取不存在的空页面?
避免爬虫抓取不存在页面的解决方案
你的问题核心是硬编码了固定的页面范围(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
相关产品推荐
相关产品推荐

