内容很简单就是使用htmlparser这个工具库来进行一些html的简单解析
测试页面:http://www.douban.com/people/maybedekky/notes
拦截的规则也是很简单的
- 豆瓣每页的url形式是http://www.douban.com/people/maybedekky/notes?start= 每页10页的话 第一页就是=0 第二页=10 以此类推
- 文章页面的url是http://www.douban.com/note/数字/ 的形式也很好获取到
- 然后就是文章内容 标题直接获取<title></title>就可以了 而内容则是被div class="note" id="link-report“包裹的
按照以上规则匹配就可以了
代码如下:
package org.cc.douban; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.NodeClassFilter; import org.htmlparser.filters.OrFilter; import org.htmlparser.tags.LinkTag; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; /** * * @author fair_jm * http://fair-jm.iteye.com/ * */ public class MayBeTest { public static final int PAGE_SIZE = 10; /** * 如果输出的标题和内容是乱序的很正常 因为用了多线程在输出的时候也没加锁 * 可以放到数据库 或者生成文本 方法中并没有共享变量所以不会产生太大的问题 * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { List<String> articel_urls = getUrl( "http://www.douban.com/people/maybedekky/notes", 11); Executor exec = Executors.newCachedThreadPool(); final CountDownLatch cdl = new CountDownLatch(articel_urls.size()); for (String url : articel_urls) { final String u = url; exec.execute(new Runnable() { @Override public void run() { getArticle(u); cdl.countDown(); } }); } cdl.await(); System.out.println("任务完成"); } /** * 得到文字(这里直接输出) * @param url 文章的url */ public static void getArticle(String url) { try { Parser parser = new Parser(url); parser.setEncoding("UTF-8"); NodeFilter articleFilter = new NodeFilter() { public boolean accept(Node node) { if (node.getText().startsWith( "div class=\"note\" id=\"link-report\"")) { return true; } else { return false; } } }; NodeFilter titleFilter = new NodeFilter() { public boolean accept(Node node) { if (node.getText().startsWith("title")) { return true; } else { return false; } } }; OrFilter or1 = new OrFilter(new NodeFilter[] { articleFilter, titleFilter }); NodeList list = parser.extractAllNodesThatMatch(or1); for (int i = 0; i < list.size(); i++) { Node tag = list.elementAt(i); System.out.println(tag.getText() + "\n" + tag.getChildren().asString().trim() + "\n"); } } catch (Exception e) { e.printStackTrace(); } } /** * * @param url 要获取日志的地址 * @param pageCount 多少页 * @return 返回对应的url列表 */ public static List<String> getUrl(String url, int pageCount) { List<String> urls = new ArrayList<String>(); try { for (int page = 0; page < pageCount; page++) { Parser parser = new Parser( url+"?start=" + page * pageCount); parser.setEncoding("gbk"); NodeList list = parser .extractAllNodesThatMatch(new NodeClassFilter( LinkTag.class)); for (int i = 0; i < list.size(); i++) { Node tag = list.elementAt(i); if (tag instanceof LinkTag)// <a> 标签 { LinkTag link = (LinkTag) tag; String linkUrl = link.getLink();// url String text = link.getLinkText();// 链接文字 if (linkUrl.contains("http://www.douban.com/note") && linkUrl.endsWith("/")) { if (!urls.contains(linkUrl)) { urls.add(linkUrl); } } } } } } catch (ParserException e) { e.printStackTrace(); } for (String s : urls) { System.out.println(s); } return urls; } }
输出就不写了 因为输出是乱序的(标题和内容我是分开打印的) 这个是没什么关系的 可以用写文件或者存入数据库的形式完成操作.
相关推荐
这里我们使用了HtmlParser库,它是一个开源的Java库,专门用于解析HTML文档,提取和处理网页上的信息。以下是如何使用HtmlParser实现网络爬虫的关键知识点: 1. **HtmlParser库**:HtmlParser是一个强大的HTML解析...
Java使用HtmlParser实现简单的网络爬虫是一种常见的技术实践,它涉及到网络编程、HTML解析和数据提取等核心概念。本文将详细讲解如何运用Java语言结合HtmlParser库来构建一个基础的网络爬虫,以便从网页中获取所需...
通过使用HTMLParser,开发者可以方便地遍历HTML元素,获取所需信息。 首先,我们需要引入HTMLParser库到项目中。这通常可以通过Maven或Gradle依赖管理工具来完成。例如,在Maven的pom.xml文件中添加以下依赖: ```...
### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...
API文档是使用HTMLParser的关键,它详尽地解释了库中每个类、方法和接口的用途。通过API文档,开发者可以了解如何初始化解析器,如何遍历HTML元素,以及如何处理各种HTML标签。例如,HTMLParser库可能会提供如`...
【Java使用HTMLParser提取网页纯文本】\n\n在Java编程中,提取网页纯文本是一项常见的任务,尤其在数据抓取、信息分析等领域。HTMLParser是一个强大的Java库,专门用于解析HTML文档,提取其中的文本内容。下面我们将...
自从Java 1.4引入`java.util.regex`包以来,Java程序员就可以方便地使用正则表达式来处理字符串操作。下面将详细介绍Java正则表达式的常用语法和特性。 1. **转义字符**: - `\a`: 响铃符 (ASCII 07) - `\f`: ...
2. **DOM树构建**:HTMLParser能够构建一个基于DOM(Document Object Model)的树形结构,使开发者可以像操作XML一样操作HTML文档,通过节点遍历和查询来获取所需信息。 3. **错误处理**:HTMLParser具备容错能力,...
根据给定文件的信息,本文将围绕“Java HTMLParser解析网页源码”的主题展开,深入探讨其功能、工作原理以及在不同场景下的应用方法。 ### Java HTMLParser简介 HTMLParser是用Java编写的开源HTML解析器,它能帮助...
在Java项目中,可以使用Maven或Gradle添加HTMLParser依赖。对于Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.htmlparser <artifactId>htmlparser <version>2.3 ``` 对于Gradle,则在build....
HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...
通过使用HTMLParser,我们可以解析HTML文档,找到特定的标签、类名或者ID,进而获取所需的数据。 要开始构建爬虫,首先需要在项目中引入HTMLParser的jar包。在提供的压缩包中,"lib"目录下的jar文件就是HTMLParser...
本文将深入探讨HTMLParser的核心功能、使用场景、以及如何在C#和Java中集成和使用。 1. HTMLParser的核心功能: HTMLParser的主要目标是解析不规则的HTML代码,它能够识别并提取出标签、属性、文本内容等关键元素...
总结来说,使用Java和HTMLParser库,我们可以有效地解析HTML文档,并通过过滤器和正则表达式来提取需要的信息。这个过程包括了创建解析器、设置编码、定义过滤器、获取节点列表、遍历子节点以及解析和提取目标数据。...
META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans....
使用HTMLParser类库的步骤大致如下: 1. 引入依赖:将HTMLParser的JAR包添加到项目的类路径中,或者在Maven或Gradle项目中配置相应的依赖。 2. 创建解析器:实例化HTMLParser对象,可以设置不同的解析策略,如严格...
本篇将详细阐述HTMLParser的使用方法、功能以及提供的相关资源。 首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解...
本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...
使用htmlparser制作的网页爬虫例题