【JAVA】使用JSOUP让JAVA取得网页上的文字

因为之前参加比赛摆摊的经验,有很多人都会问关于我们专题是怎么让JAVA / Android的读到网页上的文字,所以我这个无业游民就来回馈大家了!!
废话不多说,马上来说明到底要怎么使用JSOUP─HTML/ XML解析取得网页上的文字!!

关于JSOUP
它是一个别人写好的JAVA套件,可以解析HTML及XML,至于是为什么能做到,
因为HTML和XML有所谓的标签

如上图,就是这个左右大小于括起来的东西,
它能取得指定的标签,一直到下一个结束为止,所以凡是有标签的网页,JSOUP都能取得标签包夹的资料。
于是乎,我们可以归纳出JSOUP能作的事情有:

取得HTML网页的文字(标签若重覆,则取得方法在后面有范例)
取得XML网页的文字(因为标签不会有重覆的情况,解析标签会达到最佳效果)
资料库的资料(将取得资料库的PHP的网页按右键检视原始码后,会显示成HTML语言,接下来的方法同HTML)
若要取得一些每日天气的情报,可以至中央气象局的RSS,一样使用JSOUP解析网页上的内容
可以使用在JAVA上,当然也能使用在Android上,但需做一些设定,就能将上述四点都应用至Android app
想到待补... ..
JSOUP事前工作
请先至JSOUP官网将JAR载档下来http://jsoup.org/download

将载下来的jar档放到你的要使用的JAVA Project底下
(这一步可以不做,但如果换电脑的话罐会找不到或罐子路径错误)

开启撰写平台

点击Java Build Path,并按下右侧的添加外部JAR选择你刚刚载的jsoup.jar档案的路径
(这一步如果在换电脑写程序时,路径会跑掉,得重新再做一次)

加入后会长下面那个样子,这样就表示可以开始使用JSOUP了

JSOUP简单范例程序及说明
下面将以简单的HTML网页作为范例解说:

<html> <head> <meta http-equiv="Content-Type" content="text/html;
charset=utf-8"> <title>今天你好嗎?</title> </head> <body>

<table>
    <tr><td>喜</td><td>樂</td></tr>
    <tr><td>怒</td><td>哀</td></tr>
</table> </body> </html>

这是一个有表的HTML网页,其显示结果为

就...。长这个样子而已

接下来我打算解析这个网页的标题以及表中的第二个值

JAVA代码如下:

import java.net.URL; import org.jsoup.Jsoup; import
org.jsoup.nodes.Document; import org.jsoup.parser.Parser; import
org.jsoup.select.Elements;

public class main {

public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
        Parsing();
}
public static void Parsing() throws Exception {
    URL url = new URL(&amp;amp;amp;amp;amp;amp;amp;quot;http://在這邊輸入你要解析的網頁網址&amp;amp;amp;amp;amp;amp;amp;quot;);

    Document xmlDoc =  Jsoup.parse(url, 3000); //使用Jsoup jar 去解析網頁
    //(要解析的文件,timeout)
    Elements title = xmlDoc.select(&amp;amp;amp;amp;amp;amp;amp;quot;title&amp;amp;amp;amp;amp;amp;amp;quot;);

//要解析的tag元素為title

Elements happy = xmlDoc.select(&amp;amp;amp;amp;amp;amp;amp;quot;td&amp;amp;amp;amp;amp;amp;amp;quot;);

//要解析的tag元素為td

System.out.println("Title is "+title.get(0).text()); //得到title tag的內容
    System.out.println("you select mood is "+happy.get(1).text()); //得到td tag的內容
    //注意: 因為有好多個td 我想要取得的是<td>樂</td> 是第2個td 所以填get(1)

}   }

注解已打在代码上,值得注意的地方是在取得

在上面的关于JSOUP中有提到Android也可以使用这个方式,除了将代码改为Android代码以外,还要在Android Project的AndroidManifest.xml中调整成以下代码:

<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
进行改版本以及开启网路权限

Android的代码我就不提供了(电脑跑Android模拟器很慢+没有Android手持装置),就当作业自己改吧XD另外
就是加入jsoup.jar档时,可以加在Android Project的libs资料夹底下。

相关推荐