Scrapy爬虫获取分页最后一个li内下一页链接遇问题,求帮助
解决Scrapy获取分页最后一个有效
<li>链接的问题 问题根源分析
你之前的CSS选择器写法存在两个关键错误:
:not()语法误用:CSS的:not()选择器不支持用逗号分隔多个排除条件,正确写法是链式调用:not(.class1):not(.class2)`。- 目标元素类混淆:
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
相关产品推荐
相关产品推荐

