第十五章 爬取维基百科
译者:飞龙
自豪地采用谷歌翻译
在本章中,我展示了上一个练习的解决方案,并分析了 Web 索引算法的性能。然后我们构建一个简单的 Web 爬虫。
15.1 基于 Redis 的索引器
在我的解决方案中,我们在 Redis 中存储两种结构:
对于每个检索词,我们有一个URLSet,它是一个 Redis 集合,包含检索词的 URL。
对于每个网址,我们有一个TermCounter,这是一个 Redis 哈希表,将每个检索词映射到它出现的次数。
我们在上一章讨论了这些数据类型。你还可以在 http://thinkdast.com/redistypes 上阅读 Redis Set和Hash`的信息
在JedisIndex中,我提供了一个方法,它可以接受一个检索词并返回 Redis 中它的URLSet的键:
private String urlSetKey(String term) {
return "URLSet:" + term;
}
以及一个方法,接受 URL 并返回 Redis 中它的TermCounter的键。
private String termCounterKey(String url) {
return "TermCounter:" + url;
}
这里是indexPage的实现。
public void indexPage(String url, Elements paragraphs) {
System.out.println("Indexing " + url);
// make a TermCounter and count the terms in the paragraphs
TermCounter tc = new TermCounter(url);
tc.processElements(paragraphs);
// push the contents of the TermCounter to Redis
pushTermCounterToRedis(tc);
}
为了索引页面,我们:
为页面内容创建一个 Java 的TermCounter,使用上一个练习中的代码。
将TermCounter的内容推送到 Redis。
以下是将TermCounter的内容推送到 Redis 的新代码:
public List pushTermCounterToRedis(TermCounter tc) {
Transaction t = jedis.multi();
String ur