`

使用HtmlParser读取论坛图片

阅读更多
package com.chen;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;

import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

/
public class HttpGet {

	private static int BUFFER_SIZE = 8096;// 缓冲区大小

	/**
	 * 将HTTP资源另存为文件
	 * 
	 * @param destUrl
	 *            String
	 * @param title
	 * @param fileName
	 *            String
	 * @throws IOException
	 * @throws Exception
	 */
	public static void saveToFile(String destUrl, String title) {
		FileOutputStream fos = null;
		BufferedInputStream bis = null;
		HttpURLConnection httpUrl = null;
		URL url = null;
		byte[] buf = new byte[BUFFER_SIZE];
		int size = 0;
		int pos = destUrl.lastIndexOf('/');

		String fileName = "";
		if (pos != -1)
			fileName = destUrl.substring(pos + 1, destUrl.length());
		else
			fileName = destUrl.substring(destUrl.length() - 10, destUrl
					.length());
		String path = "D:" + File.separator + "temp" + File.separator
				+ "images" + File.separator;

		System.out.println("title: " + title);

		if (null != title && !"".equals(title)) {
			File file = new File(path + title + File.separator);
			if (!file.exists()) {
				file.mkdirs();

			}
		
			path = file.getPath();
		}
		path = path + File.separator + fileName;
		System.out.print("\t" + path);
		// 建立链接
		try {
			url = new URL(destUrl);
			httpUrl = (HttpURLConnection) url.openConnection();
			// 连接指定的资源
			httpUrl.connect();
			// 获取网络输入流
			bis = new BufferedInputStream(httpUrl.getInputStream());
			// 建立文件

			fos = new FileOutputStream(path);

			// 保存文件
			while ((size = bis.read(buf)) != -1)
				fos.write(buf, 0, size);

			fos.close();
			bis.close();
			httpUrl.disconnect();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException ex) {
			// TODO Auto-generated catch block
			ex.printStackTrace();
		}
		System.out.println(" \tsave completely");
	}

	/**
	 * 主方法
	 * 
	 * @param argv
	 *            String[]
	 */
	public static void main(String argv[]) {

		String url = "http://xxx.com";
		
		// getImagesFromSinglePage(url);
		try {
			
			String page = null;
			for(int i=2;i<=105;i++){
				page="http://xx.com/html/13/13_"+i+".shtml";
				getPageLinks(page);
			}
			getPageLinks(url);
			// String title=getTitle(url);
			// getImages(url,title);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// getImagesByParser(url);

	}

	private static void getPageLinks(String page) throws ParserException {

		Parser myParser = new Parser(page);

		// 设置编码
		myParser.setEncoding("UTF-8");
		String filterStr = "a";
		NodeFilter filter = new TagNameFilter(filterStr);
		NodeList nodeList = myParser.extractAllNodesThatMatch(filter);
		System.out.println("size: " + nodeList.size());

		for (int i = 0; i < nodeList.size(); i++) {
			LinkTag linkTag = (LinkTag) nodeList.elementAt(i);
			String link = linkTag.getLink();
			String text = linkTag.getLinkText();
			text = TextProcess(text);
			if (link.endsWith(".shtml") && text.length() > 2) {
				try {
					getImages(link,text);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

	}

	private static String TextProcess(String text) {
		text = text.trim();
		text = text.replaceAll(">", "");
		text = text.replaceAll("<", "");
		text = text.replaceAll("/", "");
		text = text.replaceAll(">", "");
		text = text.replaceAll(" ", "");
		int pos = 0;
		if ((pos = text.indexOf(":-")) != -1)
			text = text.substring(pos + 2);

		pos = text.indexOf("-");
		if (pos != -1)
			text = text.substring(0, pos);
		pos = text.indexOf("-");
		if (pos != -1)
			text = text.substring(0, pos);
		text = text.replace(".", "");
		text = text.replaceAll(",", "");
		text = text.replaceAll(",", "");
		return text;
	}

	private static String getTitle(String url) throws ParserException {

		Parser myParser = new Parser(url);

		// 设置编码
		myParser.setEncoding("UTF-8");

		String titleTag = "title";
		NodeFilter titleFilter = new TagNameFilter(titleTag);
		NodeList titleList = myParser.extractAllNodesThatMatch(titleFilter);
		int size = titleList.size();
		String title = null;
		if (size == 1) {
			TitleTag titleT = (TitleTag) titleList.elementAt(0);
			title = titleT.getTitle();

		}
		return title;

	}

	public static void getImages(String resource, String title)
			throws Exception {

		// Set
		Set<String> imagesSet = new HashSet<String>();
		Parser myParser = new Parser(resource);

		// 设置编码
		myParser.setEncoding("UTF-8");
		String filterStr = "img";
		NodeFilter filter = new TagNameFilter(filterStr);
		NodeList nodeList = myParser.extractAllNodesThatMatch(filter);
		System.out.println("size: " + nodeList.size());

		for (int i = 0; i < nodeList.size(); i++) {
			ImageTag imageTag = (ImageTag) nodeList.elementAt(i);
			String imageUrl = imageTag.getImageURL();
			System.out.println("iamge " + i + ": " + imageUrl);
			if (!imagesSet.contains(imageUrl)) {
				System.out.print("\t saving ...");
				saveToFile(imageTag.getImageURL(), title);
			} else {
				System.out.print("\t exist already,no need to save");
			}
		}

	}

}
 心血来潮,写了一个读取论坛图片的程序,能够自动把图片保存到硬盘上去,使用HtmlParse组件。
分享到:
评论

相关推荐

    HTMLParser 使用举例

    最后,我们使用 InputStreamReader 对象来读取网页的内容,并使用 HTMLParser 来解析网页。 HTMLParser 是一个功能强大且灵活的类库,用于解析和处理网页内容。它提供了多种使用方式和机制,适合不同的应用场景。

    HTMLparser

    例如,你可以使用HTMLparser来获取网页上的所有链接、图片、表格数据,甚至是嵌入的脚本和样式。 HTMLparser的工作原理通常包括以下步骤: 1. 解析HTML文档:HTMLparser首先读取HTML源代码,并按照HTML的语法规则...

    网络爬虫htmlparser

    然后,使用HTMLParser解析这个内容,查找包含基金数据的表格标签(如`&lt;table&gt;`),进一步找到表头(`&lt;th&gt;`)和数据单元格(`&lt;td&gt;`)。通过分析表格结构,可以提取出每行数据,并将其转换为"FundTableBean"实例。 在...

    HtmlParser

    HTMLParser常用于网页爬虫或数据挖掘项目,可以用来提取网页中的特定信息,如文章标题、链接、图片等。开发者可以根据HTML结构编写规则,通过解析器定位并提取所需内容。 6. **错误处理** HTML文档在现实世界中...

    HTMLParser使用详解

    虽然 HTMLParser 缺乏详尽的文档,但通过查阅源代码、社区论坛和一些现有的示例,开发者可以逐渐熟悉并掌握其使用方法。对于需要解析 HTML 的 Java 项目,HTMLParser 是一个值得考虑的库,特别是对于处理较小规模和...

    HTMLParser的使用

    HTMLParser还提供了很多高级功能,例如自定义节点处理器、使用正则表达式过滤节点、解析CSS选择器等。你可以通过继承`NodeVisitor`接口,实现自己的访问者模式,对HTML文档进行更复杂的操作。此外,还可以结合`...

    htmlparser.jar

    4. 内容提取:对于数据抓取任务,HTMLParser可以帮助开发者快速提取网页中的关键信息,如文本内容、链接、图片等。 5. 配合其他库:在提供的文件列表中,我们看到有log4j-1.2.11.jar和junit-3.8.1.jar。Log4j是流行...

    html解析工具htmllexer+htmlparser-2.1

    `htmllexer`是一个基于事件驱动的解析器,它能够读取HTML源代码并触发一系列事件,比如遇到标签开始、结束、文本等。这种工作模式使得处理HTML文档变得更加灵活和高效。`htmllexer`通常会先将HTML文档分解成一系列的...

    Commons-httpClient3.1.Jar,htmllexer.jar,htmlparser.jar

    在网页分析场景下,HTMLParser可以辅助我们更高效地处理和提取网页数据,例如查找特定元素、提取图片URL或者筛选出特定类别的内容。 在使用这些库构建简易爬虫时,通常的步骤如下: 1. **初始化HttpClient**:设置...

    java实现js、css、图片合并到html文件

    技术点:1、使用htmlparser解析html文件,得到html代码里的js、css、img链接 2、将相对路径的链接转变成绝对路径,并读取资源 3、将css和js合并到html 4、将图片转换成base64编码,写入标签的src

    python批量下载图片的三种方法

    selenium则提供了Chrome,IE,FireFox等的支持,每种浏览器都有execute_script和find_element_by_xx方法,可以方便的执行js脚本(包括修改元素)和读取html里面的元素。不足是selenium只提供对python2.6和2.7的支持...

    html转图jar.zip

    总的来说,“html转图jar.zip”提供了一套完整的解决方案,将HTML转换为图片,方便在多种场景下使用。开发者可以根据自己的需求调整参数,优化生成的图片效果。不过,为了确保最佳性能和兼容性,使用前应充分了解和...

    HtmlPaHrser学习

    使用`HtmlParser`,我们可以高效地提取网页中的特定信息,比如新闻文章的标题、作者、正文或图片。在案例中,开发者可能想要获取到`&lt;div id="contentText"&gt;`下的所有段落(`&lt;p&gt;`标签),以及满足特定尺寸的图片,...

    Python获取网页上图片下载地址的方法

    在上述示例中,我们使用了`urllib2`库来打开并读取网页内容,而`HTMLParser`库则用于解析HTML文档。这两个库都是Python标准库的一部分,无需额外安装。 1. **`urllib2`库**:`urllib2`(在Python 3中已合并到`...

    java处理html文档

    例如,可以使用`org.htmlparser.Parser`类创建解析器,并调用`parse()`方法加载HTML文档。通过`NodeList`和`Node`接口,我们可以找到特定的HTML元素并进行操作。 2. **SAX解析HTML**: 对于大型HTML文档,SAX解析...

    易语言过滤html文本源码

    HTML(HyperText Markup Language)是用于创建网页的标准标记语言,而过滤HTML文本则是为了提取其中的有用信息,如文本内容、链接、图片等。 标题“易语言过滤html文本源码”暗示了我们将讨论如何使用易语言编写...

    python实现下载指定网址所有图片的方法

    在本篇文章中,我们将详细介绍如何使用 Python 编程语言来实现从指定网址下载所有图片的功能。这个过程包括了网页内容的抓取、图片链接的解析以及图片文件的实际下载等步骤。下面将逐步进行讲解。 #### 一、项目...

    python web编程基础知识.docx

    下面是一个使用Python多线程技术进行图片下载的示例代码: ```python import threading # 假设已有一个包含图片URL列表的变量 filepathlist # filepathlist = ['http://example.com/image1.jpg', '...

    Python3实现Web网页图片下载

    - 使用`request.urlopen()`打开链接并读取图片数据。 - 将图片数据写入指定路径的文件中。 2. **多线程下载**: - 函数`downjpgmutithread`接受一个图片链接列表`filepathlist`。 - 遍历列表创建多个线程,每个...

    html转pdf jar包

    在这个版本中,你可以使用Document对象来创建PDF文档,Paragraph和Chunk对象来添加文本,Image对象来插入图片,以及其他的类来处理表格、列表和其他元素。 iTextAsian.jar是iText的一个扩展,专门用于支持亚洲语言...

Global site tag (gtag.js) - Google Analytics