如何使用Bash从HTML分页结构中提取最后一页页码?
嗨,这个需求我经常碰到,给你几个实用的Bash解决方案,根据你的HTML分页结构不同可以灵活选择:
先假设你的分页HTML结构大概是这样的(类似你说的最后一页是5的情况):
方案1:用grep+awk(适合结构简单的场景)
如果你的最后一页有明显特征(比如带class="last"),或者是最后一个页码链接,可以用文本处理工具快速提取:
- 针对带特定class的最后一页:
# 从本地HTML文件提取 grep -o '<a.*class="last".*>\([0-9]*\)</a>' your_page.html | awk -F'[<>]' '{print $3}' # 如果是直接从网页获取内容 curl https://your-target-site.com/list | grep -o '<a.*class="last".*>\([0-9]*\)</a>' | awk -F'[<>]' '{print $3}'
- 如果没有特殊class,只是最后一个页码链接:
# 提取所有页码后取最后一行 curl https://your-target-site.com/list | grep -o '<a.*>[0-9]*</a>' | grep -o '[0-9]*' | tail -n 1
⚠️ 注意:正则处理HTML有局限性,如果页面结构变了(比如标签多了空格、属性顺序调整),可能就失效了。
方案2:用专门的HTML解析工具pup(更可靠,推荐)
正则处理HTML容易踩坑,用pup这种支持CSS选择器的工具会稳妥很多,它能精准定位元素。
首先安装pup(Debian/Ubuntu可以用sudo apt install pup,其他系统可以从源码编译):
- 如果最后一页是分页容器里的最后一个链接:
curl https://your-target-site.com/list | pup '.pagination a:last-child text{}'
- 如果最后一页有专属class(比如
page-last):
curl https://your-target-site.com/list | pup '.page-last text{}'
方案3:用xmllint(适合规范的XHTML)
如果你的页面是标准的XHTML,可以用xmllint结合XPath查询:
curl https://your-target-site.com/list | xmllint --html --xpath 'string(//div[@class="pagination"]/a[last()])' - 2>/dev/null
这里的2>/dev/null是用来屏蔽xmllint对非标准HTML的警告信息。
你可以根据自己的实际HTML结构调整选择器,比如把.pagination换成你页面里分页容器的真实class或ID就行。
内容的提问来源于stack exchange,提问作者M.Mar
相关产品推荐
相关产品推荐

