为了测试文本聚类算法,老板让每人就某一话题找1000篇新闻,,“你们没有爬虫??那就自己用手复制吧,3天复制完!”
好吧,那就写个爬虫吧~查资料+编码一下午搞定,写的非常简陋,只能爬新浪军事板块的文章,不怕大家笑话了,哈哈~
package com.slimspider;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.visitors.TextExtractingVisitor;
import com.slimspider.utils.StringURLQueue;
/**
*
* Just for sina military section
*
* @author LiangTE
*
*/
public class Main {
private static int num = 0;
public static void crawler(String url) {
HttpClient httpClient = new DefaultHttpClient();
StringURLQueue queue = StringURLQueue.getInstance();
List<String> deprecatedURLs = new ArrayList<String>();
try {
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpClient.execute(httpget);
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity, "gbk");
/**
*
* 抓取当前页面的正文
*
*/
String totalContent = body.substring(body.indexOf("<!-- publish_helper"), body.indexOf("<!-- publish_helper_end -->"));
String text = totalContent.substring(totalContent.indexOf("<p>"),
totalContent.indexOf("<style type"));
if(totalContent.indexOf("<div class=\"otherContent") != -1) {
String links = totalContent.substring(totalContent.indexOf("<div class=\"otherContent"));
Parser parser = new Parser(text);
TextExtractingVisitor visitor = new TextExtractingVisitor();
parser.visitAllNodesWith(visitor);
String resu = visitor.getExtractedText();
FileWriter fw = new FileWriter("D:/resu/m" + ++num + ".txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write(resu);
bw.close();
fw.close();
System.out.println(resu);
/**
*
* 抓取当前页面的url
*
*/
NodeFilter filter = new TagNameFilter("a");
Parser parser2 = new Parser(links);
NodeList nodeList = parser2.extractAllNodesThatMatch(filter);
int len = nodeList.size();
for (int i = 0; i < len; i++) {
LinkTag tag = (LinkTag) nodeList.elementAt(i);
String newUrl = tag.extractLink();
if(!deprecatedURLs.contains(newUrl)) {
if(newUrl.startsWith("http://mil.news.sina.com.cn")) {
queue.enQueue(newUrl);
}
}
}
String targetUrl = queue.deQueue();
deprecatedURLs.add(targetUrl);
crawler(targetUrl);
}
crawler(queue.deQueue());
} catch (Exception e) {
e.printStackTrace();
} finally {
httpClient.getConnectionManager().shutdown();
}
}
public static void main(String[] args) {
crawler("http://mil.news.sina.com.cn/2012-10-23/0913704471.html");
}
}
原文链接:
http://my.oschina.net/liangtee/blog/84869
分享到:
相关推荐
一个简单的网络爬虫小程序 java 源代码
这是个完整的java爬虫程序,可以从一个指定的种子url开始以b广度优先的原则趴下相关的网页,保存在硬盘上
超简单的 Web 爬虫程序,不过可以在他基础之上改造一下,写出强大点的爬虫! 谢谢提供程序的 blog 友! //一直在使用和写PHP spider的爬虫程序。如果用JAVA写的话前台可以加入spider 页面 但是jaxa部分要删去,...
java实现一个简单的网络爬虫程序,可以抓取网页,并输出网页源代码
一个java编写的简单爬虫程序,可以实现通过Socket保存html网页 去乱码 存储当前页面URL 自动顺序抓取页面
java实现的爬虫程序,有基本的逻辑思路及相应的代码
java写的简单爬虫程序,可以进行简单的爬虫,不过功能没有特别完善
爬虫搜索,简单的搜索引擎,java爬虫,搜索引擎例子,爬虫demo,java实现互联网内容抓取,搜索引擎大揭密.java爬虫程序。web搜索。爬虫程序。sigar搜索,定时搜索互联网内容信息。
可以用的java爬虫程序,你可以直接在eclipse里面输入,然后执行!
爬虫搜索,简单的搜索引擎,java爬虫,搜索引擎例子,爬虫demo,java实现互联网内容抓取,搜索引擎大揭密.java爬虫程序。web搜索。爬虫程序。sigar搜索,定时搜索互联网内容信息。
java基于jsoup+mongodb的简单爬虫入门程序,简单易懂,希望能给大家提供帮助
一个JAVA开发的简单网络爬虫 可以实现对指定站点新闻内容的获取 程序很简单 大家一起学习
爬取youku网页上内容,并进行得到的结果进行过滤.
以下是一个Java爬虫程序,它能从指定主页开始,按照指定的深度抓取该站点域名下的网页并维护简单索引。 参数:private static int webDepth = 2;//爬虫深度。 主页的深度为1,设置深度后超过该深度的网页不会...
这是一个简单的Java网络蜘蛛的小程序,里面有他的详细代码
后来google了一下,找到了一个简单爬虫的程序代码(http://www.blogjava.net/Jack2007/archive/2008/03/24/188138.html),随即试验了一下,发现确实能得到网页的内容,在这里还是要谢谢代码的提供者——Jack.Wang...
Arachnid:是一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并能够在Web站上的每个页面被解析之后增加几行代码调用...
一个JAVA开发的简单网络爬虫 可以实现对指定站点新闻内容的获取 程序很简单 大家一起学习
Java网络爬虫简单实现,一个简单的爬虫,可以运行,程序简单,适合入门级的人看