如何用solr实现网页快照?
最近我用nutch进行网页爬虫,采集到数据提交给solr建索引。根据这个地址:http://williamx.blog.51cto.com/3629295/722707
进行了配置,并在索引上形成了catche_content字段有值,但是这个值是一段很长的字符串(下面的图片),
不知道如何在网页上使用这个值?请高手们指教!谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
哦,那我看看吧。
顺便问一个问题?如何用Nutch来抓取图片呢?默认情况下nutch是不抓去图片,视频的。不知您有没有研究过?谢谢!
这个我猜是你爬取数据的问题吧,我的显示有样式的。
你好,感谢您的回复!
还有一个问题是我按照你说的去做了,网页快照做出来了,byte[] inOutb = (byte[]) doc.getFieldValue("cache_content");cache_content = new String(inOutb, "gbk");最后cache_content内容就是抓取页面的html代码。通过out.println(cache_content);直接显示页面后发现显示的页面很乱。是因为没有css,js还有images图片。如果能把原来页面的js,css,图片和当前显示快照的页面放在一起的话就更好看了。不知这个问题有没有研究过?请给我指教!谢谢
您好,我是按照你说的去做了,用nutch抓取网页内容后,数据提交给solr建索引。用solr查询数据时cache_content字段有内容,但是一串串很长的字符串,就像上面我贴的内容所示。请问我如何把这个这个字符串转换成有效的html值显示在页面上?谢谢。。。!我是用solrj提取solr索引数据的。
1.找到 eclipse中nutch-1.7 项目的 solrindex-mapping.xml,添加 <field dest="cache_content" source="cache_content"/>
2.schema.xml 新增<field name="cache_content" type="binary" indexed="false" stored="true" />
3.修改源代码:具体见下面吧
IndexerMapReduce
public String getById(Page page, String id) throws SolrServerException,
MalformedURLException {
// 获取连接服务
CommonsHttpSolrServer server = SolrServer.getInstance().getServer();
// 提升性能采用流输出方式
server.setRequestWriter(new BinaryRequestWriter());
// 搜索条件的设置
SolrQuery query = new SolrQuery();
String ckw = page.getConditions().get("kw").toString();// 为防止和其他变量重名,在变量的开始加上condition的首字母c
query.set("q", "content:" + ckw);
QueryResponse qrsp = server.query(query);
SolrDocumentList list = qrsp.getResults();
String cache_content = null;
Iterator<SolrDocument> iter = list.iterator();
while (iter.hasNext()) {
SolrDocument doc = iter.next();
String idStr = doc.getFieldValue("id").toString();
if (idStr.equals(id)) {
byte[] inOutb = (byte[]) doc.getFieldValue("cache_content");
// System.out.println(inOutb);
try {
cache_content = new String(inOutb, "gbk");
// System.out.println(cache_content);
} catch (Exception e) { // TODO Auto-generated catch
e.printStackTrace();
}
break;
}
}
return cache_content;
}
这个方法里,我主要处理的就算快照的显示。其中主要用到的就是byte[] inOutb = (byte[]) doc.getFieldValue("cache_content");