网络爬虫之html获取和解析
最近同学让帮忙写一个网页分析程序以获取网页中相关内容。为此,忙活了两天,终于写了一个从网页中获取表格内容程序。虽然比较简单,但是想了想,能够为那些想写网络爬虫程序筒子们提供一定帮助。网页分析和内容获取是网络爬虫中必不可少的步骤。
一个完整的网络爬虫包含了接个步骤:
1. 获取对应url的html内容。
2. 分析html内容,获取链接。
3. 不断迭代前两个步骤,直到喊停。
其实不难发现,真正关键的是后面两个步骤,第一个是html内容的分析,其次就是迭代算法设计也就是实际的爬虫策略设计。而我们现在主要讨论第一个部分html内容的分析,接下来我们主要介绍网上一个比较直到jar包,htmlparse如何对html进行分析,以获取html想要内容,另外要说明的是,本文并没有对htmlparse进行更详细的描述,只是告知如何使用htmlparse达到你的分析html的目的。更深层次的使用,还需筒子们自己去学习和挖掘。
在学习之前,先分享一下htmlparse的wiki网址以及下载地址:
wiki: http://htmlparser.sourceforge.net/
下载链接: http://sourceforge.net/projects/htmlparser/files/Integration-Builds/2.0-20060923/
下载完后,看完htmlparse后,htmlparse包含如下几个jar包:filterbuilder.jar、htmlexer.jar、htmlparser.jar、sitecapture.jar、thumblina.jar。
htmlexer.jar负责html词法构成,我是这么理解的。整个htmlparser将html每一个标签例如html、p、div、table都称为tag。整个htmlexer可以看作是对html整个页面标签的解释。htmlparser.jar的主要功能则是对html进行解析,然后利用过滤条件获取你想要的内容。
简要描述后,看看我这两天的工作吧。
首先首先是获取种子url对应的html内容,这个jdk中包含了对应的url和urlconnection可以帮我们完成,具体看如下代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
public class HtmlRetrieve {
/**
* @param html_url the url of html.
* @return if url is not exist, return null else return the content of html.
* */
public String GetContentOfHtml(String html_url){
URL url;
try {
url = new URL(html_url);
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
if(urlConn != null)
{
urlConn.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),HtmlEncoding.gbk_encoding));
StringBuffer strBuffer = new StringBuffer();
String line;
while((line = reader.readLine())!=nul