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组件。
分享到:
相关推荐
最后,我们使用 InputStreamReader 对象来读取网页的内容,并使用 HTMLParser 来解析网页。 HTMLParser 是一个功能强大且灵活的类库,用于解析和处理网页内容。它提供了多种使用方式和机制,适合不同的应用场景。
例如,你可以使用HTMLparser来获取网页上的所有链接、图片、表格数据,甚至是嵌入的脚本和样式。 HTMLparser的工作原理通常包括以下步骤: 1. 解析HTML文档:HTMLparser首先读取HTML源代码,并按照HTML的语法规则...
然后,使用HTMLParser解析这个内容,查找包含基金数据的表格标签(如`<table>`),进一步找到表头(`<th>`)和数据单元格(`<td>`)。通过分析表格结构,可以提取出每行数据,并将其转换为"FundTableBean"实例。 在...
HTMLParser常用于网页爬虫或数据挖掘项目,可以用来提取网页中的特定信息,如文章标题、链接、图片等。开发者可以根据HTML结构编写规则,通过解析器定位并提取所需内容。 6. **错误处理** HTML文档在现实世界中...
虽然 HTMLParser 缺乏详尽的文档,但通过查阅源代码、社区论坛和一些现有的示例,开发者可以逐渐熟悉并掌握其使用方法。对于需要解析 HTML 的 Java 项目,HTMLParser 是一个值得考虑的库,特别是对于处理较小规模和...
HTMLParser还提供了很多高级功能,例如自定义节点处理器、使用正则表达式过滤节点、解析CSS选择器等。你可以通过继承`NodeVisitor`接口,实现自己的访问者模式,对HTML文档进行更复杂的操作。此外,还可以结合`...
4. 内容提取:对于数据抓取任务,HTMLParser可以帮助开发者快速提取网页中的关键信息,如文本内容、链接、图片等。 5. 配合其他库:在提供的文件列表中,我们看到有log4j-1.2.11.jar和junit-3.8.1.jar。Log4j是流行...
`htmllexer`是一个基于事件驱动的解析器,它能够读取HTML源代码并触发一系列事件,比如遇到标签开始、结束、文本等。这种工作模式使得处理HTML文档变得更加灵活和高效。`htmllexer`通常会先将HTML文档分解成一系列的...
在网页分析场景下,HTMLParser可以辅助我们更高效地处理和提取网页数据,例如查找特定元素、提取图片URL或者筛选出特定类别的内容。 在使用这些库构建简易爬虫时,通常的步骤如下: 1. **初始化HttpClient**:设置...
技术点:1、使用htmlparser解析html文件,得到html代码里的js、css、img链接 2、将相对路径的链接转变成绝对路径,并读取资源 3、将css和js合并到html 4、将图片转换成base64编码,写入标签的src
selenium则提供了Chrome,IE,FireFox等的支持,每种浏览器都有execute_script和find_element_by_xx方法,可以方便的执行js脚本(包括修改元素)和读取html里面的元素。不足是selenium只提供对python2.6和2.7的支持...
总的来说,“html转图jar.zip”提供了一套完整的解决方案,将HTML转换为图片,方便在多种场景下使用。开发者可以根据自己的需求调整参数,优化生成的图片效果。不过,为了确保最佳性能和兼容性,使用前应充分了解和...
使用`HtmlParser`,我们可以高效地提取网页中的特定信息,比如新闻文章的标题、作者、正文或图片。在案例中,开发者可能想要获取到`<div id="contentText">`下的所有段落(`<p>`标签),以及满足特定尺寸的图片,...
在上述示例中,我们使用了`urllib2`库来打开并读取网页内容,而`HTMLParser`库则用于解析HTML文档。这两个库都是Python标准库的一部分,无需额外安装。 1. **`urllib2`库**:`urllib2`(在Python 3中已合并到`...
例如,可以使用`org.htmlparser.Parser`类创建解析器,并调用`parse()`方法加载HTML文档。通过`NodeList`和`Node`接口,我们可以找到特定的HTML元素并进行操作。 2. **SAX解析HTML**: 对于大型HTML文档,SAX解析...
HTML(HyperText Markup Language)是用于创建网页的标准标记语言,而过滤HTML文本则是为了提取其中的有用信息,如文本内容、链接、图片等。 标题“易语言过滤html文本源码”暗示了我们将讨论如何使用易语言编写...
在本篇文章中,我们将详细介绍如何使用 Python 编程语言来实现从指定网址下载所有图片的功能。这个过程包括了网页内容的抓取、图片链接的解析以及图片文件的实际下载等步骤。下面将逐步进行讲解。 #### 一、项目...
下面是一个使用Python多线程技术进行图片下载的示例代码: ```python import threading # 假设已有一个包含图片URL列表的变量 filepathlist # filepathlist = ['http://example.com/image1.jpg', '...
- 使用`request.urlopen()`打开链接并读取图片数据。 - 将图片数据写入指定路径的文件中。 2. **多线程下载**: - 函数`downjpgmutithread`接受一个图片链接列表`filepathlist`。 - 遍历列表创建多个线程,每个...
在这个版本中,你可以使用Document对象来创建PDF文档,Paragraph和Chunk对象来添加文本,Image对象来插入图片,以及其他的类来处理表格、列表和其他元素。 iTextAsian.jar是iText的一个扩展,专门用于支持亚洲语言...