Python从HTML中提取最大页码 运行仅返回当前页问题排查
问题原因及解决方案
核心问题点
- 你选择的CSS类
pg _act是当前激活页的专属样式,只有你正在访问的那一页的页码标签会携带该类,因此每次只能采集到当前页的页码:访问第一页时返回1,访问第48页时返回48,根本无法获取全量页码列表。 - 你采集到的页码默认是字符串格式,直接调用
max()方法会按ASCII字符顺序比较,而非数字大小比较,例如字符串'10'会被判定为小于'2',即便拿到全量页码也会得到错误结果。
修复方案
首先修改标签筛选规则,选择所有带pg类的页码标签,不要添加_act的激活状态限制;其次将取到的页码文本转成整数类型再存入列表,最后取最大值。
修正后代码如下:
def getLastPageNumber(soup): number = [] # 筛选所有页码标签,不限制激活状态 for item in soup.find_all("a", class_="pg"): page_text = item.text.strip() # 过滤非数字的特殊标签(比如首页、尾页的箭头按钮) if page_text.isdigit(): number.append(int(page_text)) # 兼容无页码的场景默认返回1 return max(number) if number else 1
如果需要更高的适配性,还可以通过标签的aria-label属性提取页码,避免部分场景下页码文本不规范的问题:
import re def getLastPageNumber(soup): number = [] # 匹配aria-label里的页码规则 page_pattern = re.compile(r'Page (\d+)') for item in soup.find_all("a", class_="pg"): aria_label = item.get('aria-label', '') match = page_pattern.search(aria_label) if match: number.append(int(match.group(1))) return max(number) if number else 1
内容的提问来源于stack exchange,提问作者Abimbola Ojikutu
相关产品推荐
相关产品推荐

