java获取html

html-css010

java获取html,第1张

Java访问网络url,获取网页的html代码

方式一:

一是使用URL类的openStream()方法:

openStream()方法与制定的URL建立连接并返回InputStream类的对象,以从这一连接中读取数据;

openStream()方法只能读取网络资源。

二是使用URL类的openConnection()方法:

openConnection()方法会创建一个URLConnection类的对象,此对象在本地机和URL指定的远程节点建立一条HTTP协议的数据通道,可进行双向数据传输。类URLConnection提供了很多设置和获取连接参数的方法,最常用到的是getInputStream()和getOutputStream()方法。

openConnection()方法既能读取又能发送数据。

列如:

public static void main(String args[]) throws Exception {

try {

//输入url路径

URL url = new URL("url路径") InputStream in =url.openStream() InputStreamReader isr = new InputStreamReader(in) BufferedReader bufr = new BufferedReader(isr) String str while ((str = bufr.readLine()) != null) {System.out.println(str) }bufr.close() isr.close() in.close() } catch (Exception e) {e.printStackTrace() }}

java可以使用jsoup、htmlparser等工具进行html的读取和解析,以下是详细说明:

1、jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。据说它是基于MIT协议发布的。

jsoup的主要功能如下:

从一个URL,文件或字符串中解析HTML;

使用DOM或CSS选择器来查找、取出数据;

可操作HTML元素、属性、文本;

示例代码:

Document doc = Jsoup.parse(input, "UTF-8", "http://www.dangdang.com")

Element content = doc.getElementById("content")

Elements links = content.getElementsByTag("a")

for (Element link : links) {

String linkHref = link.attr("href")

String linkText = link.text()

}

2、htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0。 据说htmlparser就是目前最好的html解析和分析的工具。无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍不住称赞。

在线文档: http://www.osctools.net/apidocs/apidoc?api=HTMLParser;http://htmlparser.sourceforge.net/project-info.html

示例代码:

Parser parser = new Parser ("http://www.dangdang.com")

NodeList list = parser.parse (null)

Node node = list.elementAt (0)

NodeList sublist = node.getChildren ()

System.out.println (sublist.size ())

package httpclient_learnimport java.io.IOExceptionimport org.apache.http.HttpEntityimport org.apache.http.HttpStatusimport org.apache.http.client.ClientProtocolExceptionimport org.apache.http.client.methods.CloseableHttpResponseimport org.apache.http.client.methods.HttpGetimport org.apache.http.client.utils.HttpClientUtilsimport org.apache.http.impl.client.CloseableHttpClientimport org.apache.http.impl.client.HttpClientsimport org.apache.http.util.EntityUtilspublic class HttpClientTest {

public static void main(String[] args) {//1.生成httpclient,相当于该打开一个浏览器

CloseableHttpClient httpClient = HttpClients.createDefault()

CloseableHttpResponse response = null //2.创建get请求,相当于在浏览器地址栏输入 网址

HttpGet request = new HttpGet("https://www.cnblogs.com/") try {//3.执行get请求,相当于在输入地址栏后敲回车键

response = httpClient.execute(request)

//4.判断响应状态为200,进行处理

if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {//5.获取响应内容

HttpEntity httpEntity = response.getEntity()

String html = EntityUtils.toString(httpEntity, "utf-8")

System.out.println(html)

} else {//如果返回状态不是200,比如404(页面不存在)等,根据情况做处理,这里略

System.out.println("返回状态不是200")

System.out.println(EntityUtils.toString(response.getEntity(), "utf-8"))

}

} catch (ClientProtocolException e) {

e.printStackTrace()

} catch (IOException e) {

e.printStackTrace()

} finally {//6.关闭HttpClientUtils.closeQuietly(response)

HttpClientUtils.closeQuietly(httpClient)

}

}

}