2个回答
展开全部
可以,修改一下nutch的插件就行了。由于好久没你那个nutch了,那时候还是1.0,不过nutch在spider这块的插件应该没什么变动。
首先你要知道你要抓取的新闻的div
修改parse-html插件,HtmlParser.java这个文件。因为我这边没有环境,刚从官网上下了个1.7的源码,对着里面的和你说。我们要修改的方法是private DocumentFragment parse(InputSource input) 这个方法,你可以debug一下,input里面,就是抓取的页面里的内容,(如果不是,你再从其他的方法里找找)
然后创建一个分析input的方法。在里面用htmlparser把你要的结构拿出来。不过htmlarser有BUG,而且很久都没有更新了,建议你用Jsoup。我的日志里面用的是htmlparser,所以你改改就可以。
public InputSource getinput(InputSource input){ String str=""; try { BufferedReader isr = new BufferedReader(newInputStreamReader(input.getByteStream(),"utf-8")); while(isr.ready()){ str+=(char)isr.read(); } } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Parser p = new Parser(str); p.setEncoding("utf-8"); NodeFilter filter=new AndFilter(newTagNameFilter("div"),new HasAttributeFilter("class","mconleft")); NodeList nodelist=p.parse(filter);
NodeIterator it=nodelist.elements(); if(!it.hasMoreNodes()){ input.setByteStream(newByteArrayInputStream(str.getBytes("utf-8"))); return input; } while(it.hasMoreNodes()){ Node node=(Node)it.nextNode(); input.setByteStream(newByteArrayInputStream(node.toHtml().getBytes("UTF-8"))); } } catch (ParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return input; }
从代码上你能看到,我这里只抓取 DIV的class叫mconleft的。把你要抓取的新闻的div替换这块就可以了,然后将方法应用的parse(InputSource input)里面,然后从新ant一下nutch,把war包放到tomat下面试试。
基本上就是这样了,可能还有其他的更简单的方法。当时急着用nutch,就没具体的研究,现在也不弄了,呵呵
纯手打,希望能帮到你
首先你要知道你要抓取的新闻的div
修改parse-html插件,HtmlParser.java这个文件。因为我这边没有环境,刚从官网上下了个1.7的源码,对着里面的和你说。我们要修改的方法是private DocumentFragment parse(InputSource input) 这个方法,你可以debug一下,input里面,就是抓取的页面里的内容,(如果不是,你再从其他的方法里找找)
然后创建一个分析input的方法。在里面用htmlparser把你要的结构拿出来。不过htmlarser有BUG,而且很久都没有更新了,建议你用Jsoup。我的日志里面用的是htmlparser,所以你改改就可以。
public InputSource getinput(InputSource input){ String str=""; try { BufferedReader isr = new BufferedReader(newInputStreamReader(input.getByteStream(),"utf-8")); while(isr.ready()){ str+=(char)isr.read(); } } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Parser p = new Parser(str); p.setEncoding("utf-8"); NodeFilter filter=new AndFilter(newTagNameFilter("div"),new HasAttributeFilter("class","mconleft")); NodeList nodelist=p.parse(filter);
NodeIterator it=nodelist.elements(); if(!it.hasMoreNodes()){ input.setByteStream(newByteArrayInputStream(str.getBytes("utf-8"))); return input; } while(it.hasMoreNodes()){ Node node=(Node)it.nextNode(); input.setByteStream(newByteArrayInputStream(node.toHtml().getBytes("UTF-8"))); } } catch (ParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return input; }
从代码上你能看到,我这里只抓取 DIV的class叫mconleft的。把你要抓取的新闻的div替换这块就可以了,然后将方法应用的parse(InputSource input)里面,然后从新ant一下nutch,把war包放到tomat下面试试。
基本上就是这样了,可能还有其他的更简单的方法。当时急着用nutch,就没具体的研究,现在也不弄了,呵呵
纯手打,希望能帮到你
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询