假设有时候基于工作的原因,需要采集某个网站指定网页集,如何识别出连续网页是个值得深入思考的问题。为了简化问题,优化解决问题的思路,此篇暂不讨论POST方法传递页码参数的方法,仅关注GET方法。
我们经常看到各种规则的url网址,比如:
(1-a)https://www.***.com/weimei/49958.html
(1-b)https://www.***.com/weimei/49958_2.html
(2-a)https://www.***.top/MeiNv/2020-03/10072360.html
(2-b)https://www.***.top/MeiNv/2020-03/10072360p2.html
(3-a)http://aipai.***.com.cn/activity_album/detail/622865/#p=1
(3-b)http://aipai.***.com.cn/activity_album/detail/622865/#p=2
以上三种是比较常见的规则的网页集。
第1、2种比较好划分,以首页为基准,去掉文件扩展名.html,然后判断后续url网址是否以该基准为前缀来确定是否连续页面。第3种难度稍高,没有文件扩展名格式化的样式,无法像前两者直接抽象出共性,只能转化为具体的规则。
(4-a)https://www.***.com/v/79861-1-0.html
(4-b)https://www.***.com/v/79861-1-1.html
第4种虽然具有格式化的样式,也具有文件扩展名,依然不能像第1、2种那样轻易抽象程度高。像第3、4这两种规则的连续网址集,除了使用特定具体的规则外,还可以采用“模糊笼统”的正则表达式匹配的方式来判断。
然而最为奔溃的是以下这种。
你能看清其中代表连续性的规则逻辑在哪里?几乎看不到规则的合理性。虽然上面可以看到,很多参数使用连接符“&”串联在一起,但是单从分页来看完全看不出来后者是前者的下一页。可以毫不夸张的说,是连续性判断逻辑的“灾难”。这个有点像C语言种的链表,“外表”看起来相似序号无关联性,但是从存储地址来看却是紧紧相连的。
对于这种存储地址关联的连续网页集合,普通法则似乎完全失效。但有一点肯定的是,虽然它们参数繁多冗长,却仍然是“规则排列”的。也就是说,还可以使用正则表达式匹配判断一二。然而这里还有个问题,即使采用正则表达式,匹配到相同或相似规则的网址,如何确定是连续网页集的结尾?因为事实上,它们是搜索引擎呈现的超大数目网页地址集之一。