我正在(某种程度上)抓取url,其中许多url使用查询字符串来标识内容,例如youtube视频。通常只使用查询字符串中使用的一小部分键来标识内容,有时整个查询字符串根本不重要。例如,在大多数youtube url中,query string keyv
指定视频,而hd
如果存在并设置为1,则在hd中播放相同的视频。
我现在想知道查询字符串中的哪个键对内容确实很重要。为此,我目前将对应于原始url的页面(例如,http://www.youtube.com/watch?v=kA0pkemJxMc&hd=1
)与如果逐步删除每个单独的查询字符串键(http://www.youtube.com/watch?v=kA0pkemJxMc
和http://www.youtube.com/watch?hd=1
)所接收的页面进行比较。如果页面是相同的,我认为关键并不重要。
问题是,两页是什么时候一样的?目前我测试两件事:(a)如果页面标题不同,我假设页面不同。它通常已经足够好了,但是我已经无意中发现了各种总是使用相同通用标题的网站。(b)我提取两页的可见文本,并计算出top-k最常用的单词。如果这两组不同,我想页数是不同的。工作也没那么糟糕,但许多页面包含动态内容(例如,侧边栏div中的facebook消息的最新tweets或其他内容),从而影响最常用的单词集。
我想没有100%可靠的方法来确定重要的查询字符串键,即内容定义(也许这甚至是开放的解释)。但是,我想知道我该如何改进我的机制。
最佳答案
克里斯蒂安,你有个有趣的问题!:-)
您可以使用Canonical-Tag作为附加提示。如果它在网站上使用,你正在测试,如果它是正确的实施(你可以手动检查之前,每页)。首先:在“原始url”上检查它的目标位置。第二步:跳过某些参数并仍然指向同一规范url后返回的任何页面可能都有相同的主要内容。
另外一个想法:您已经在使用术语频率阵列。根据我的经验,您可以使用数组顶部x元素上的levenshtein distance来对这两个文档的相似程度进行更柔和的评分。你可以(在一些实验之后)定义一个足够相似/不够相似的阈值(甚至是每页,取决于你的确切目标)。
[编辑]
好吧,实现起来可能不那么简单(这取决于你的编程技巧和经验),但是经过一段时间的思考,我认为如果你在term vector model的帮助下检查文档的相似性,你会得到最好的结果。如果您将html标记包含到向量中(在您的设置中,您希望测试整个文档的相似性),甚至可以对此进行改进。
关于html - 识别URL查询字符串中的内容定义键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24730496/