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

Scrapy爬虫获取分页最后一个li内下一页链接遇问题,求帮助

解决Scrapy获取分页最后一个有效<li>链接的问题

问题根源分析

你之前的CSS选择器写法存在两个关键错误:

  1. :not()语法误用:CSS的:not()选择器不支持用逗号分隔多个排除条件,正确写法是链式调用:not(.class1):not(.class2)`。
  2. 目标元素类混淆:page-sep是<span>的class,并非<li>的属性,所以你针对<li>写的:not([class="page-sep, active"])完全无效,反而导致选择器解析异常,最终返回了带active类的<li>。

正确解决方案

根据你的HTML结构,以下几种写法可以精准获取目标链接:

写法1:直接定位最后一个非active类的<li>链接

# 获取分页区域内最后一个不带active类的li中的a标签链接
next_page_url = response.css('div.pagination.pagination-small.hidden-phone ul li:not(.active):last-child a::attr(href)').get()

写法2:先提取有效li列表再取最后一个

如果需要更灵活的过滤逻辑,可先获取所有符合条件的li元素,再取最后一个:

# 获取所有不带active类的li元素
valid_li_list = response.css('div.pagination.pagination-small.hidden-phone ul li:not(.active)')
# 取最后一个li中的a链接
if valid_li_list:
    next_page_url = valid_li_list[-1].css('a::attr(href)').get()

写法3:直接定位右侧箭头的下一页按钮

如果你的目标是最右侧带icon-chevron-right的“下一页”按钮,可通过图标类直接定位:

next_page_url = response.css('div.pagination.pagination-small.hidden-phone ul li a i.icon-chevron-right').xpath('../@href').get()

关键说明

  • :not(.active)精准排除掉带跳转功能的特殊active类li;
  • :last-child直接选中父元素内最后一个符合条件的子元素;
  • ::attr(href)直接提取a标签的href属性,无需先获取整个标签再二次处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:15:57