作者:大魔王 | 来源:互联网 | 2023-06-28 20:09
一.分析
若从分类开始:
1.百科库中显示的分类是不全的,只有一些开放分类。
2.一个分类的数量不固定,每一页最多显示30个。
比如url:

参数解析:
https://baike.baidu.com/fenlei/此处替换分类
Limit:30 每个页最多显示30条。
Index:第几页。
Offset:下标。 此url显示的就是这个分类下 30到30+offset之间的词条。
直接优化:
上述例子,直接改成:
http://baike.baidu.com/fenlei/文化遗产?limit=999999999
即可显示此分类下所有的目前开放的词条。无须遍历一直遍历“下一页”标签。
上述第1点:分类不全的问题。
上述第2点:某一个分类下 词条不全的问题。
若从词条进行拓扑,往外蔓延,不能保证所有词条之间都是相通的。
综上,我计划从分类和词条两个点同时出发,去统计所有的分类,再去统计所有的词条。
具体步骤如下:
二.步骤
1.分类出发
先定义所有的一级分类。

除了这些一级分类,还有两个需要额外单独考虑的:
https://baike.baidu.com/art
https://baike.baidu.com/science
然后遍历这些一级分类,通过正则,提取所有a标签中的


将这些可能的分类url全部规则化:
http://baike.baidu.com/fenlei/?
存到一个set集合中。
2.词条出发
1.在遍历每一个词条的同时,同时也需要一个词条的set集合,找到一个词条的url就往set中add。
具体情况:


同样规则化:
https://baike.baidu.com/item/?
存到这个集合中,其中每个词条有一个需要筛选的内容:

这些词条标签也可能是分类,通过组装url:
https://baike.baidu.com/fenlei/政治人物.
去访问看返回状态进行判断是否需要add到词条的set中。
2.可以将https://baike.baidu.com/view/+数字,通过判断这个html是否返回正常进行上述操作。
三.汇总
将分类中出现的词条,分类汇总到词条的set,和分类的set.
将词条中出现的词条,分类汇总到词条的set,和分类的set.
最后遍历分类set找词条add到词条的set,最后形成一个从词条和分类出发的词条set。
最后再在每一个词条url中提取需要的内容。