【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;quot;http://在這邊輸入你要解析的網頁網址&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;quot;title&amp;amp;amp;amp;amp;amp;quot;);
//要解析的tag元素為title
Elements happy = xmlDoc.select(&amp;amp;amp;amp;amp;amp;quot;td&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资料夹底下。