http://as.baidu.com/a/asgame?cid=102&s=1
此連結為百度安卓應用的頁面
分析頁面源碼,寫出适當的程式來擷取想要的内容。(百度的頁面寫的非正常則,喜歡看這種頁面
)
把内容入庫,再通過編寫down方法。。。。後面的就不說了。
主要是對Jsoup的學習。
下面是已經試驗過的例子:
準确率90%+
需要導入的包:jsoup-1.7.1.jar
package com.test;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
import com.market.model.AppTest;
/**
* 抓取工具(百度App)
*
* @author Simple
*
*/
public class CaptureUtil {
public static List<AppTest> parsePage(String url) {
List<AppTest> appTests=new LinkedList<AppTest>();
Document doc=null;
try {
doc=Jsoup.connect(url).get();
} catch(IOException e1) {
System.out.println("連接配接失敗!");
e1.printStackTrace();
}
Elements divs=doc.getElementsByTag("div");
for(Element e: divs) {
if(e.attr("class").equals("filter-app-list-wrapper")) {
Elements divsChildrens=e.children();
for(Element e2: divsChildrens) {
Elements lis=e2.getElementsByTag("li");// <li>
for(Element e3: lis) {
AppTest at=new AppTest();
// img
Elements imgs=e3.getElementsByTag("img");
Element img=imgs.get(0);
String src=img.attr("src");
System.out.println("---------------------------");
System.out.println("Logo位址:" + src);
at.setLogoUrl(src);
// div hover-show
for(Element div: e3.getElementsByTag("div")) {
if(div.attr("class").equals("hover-show")) {
for(Element e4: div.children()) {
String name=null;
String about=null;
String downloadUrl=null;
String detailUrl=null;
if(e4.attr("class").equals("hover-link")) {
detailUrl=e4.attr("href");
System.out.println("二級連結位址:" + detailUrl);
parseDetailPage(at, detailUrl);
for(Element e5: e4.children()) {
Elements h4s=e5.getElementsByTag("h4");
for(Element ee: h4s) {
for(Element eee: ee.children()) {
if(eee.attr("class").equals("tit")) {
name=eee.childNode(0).outerHtml();
System.out.println("應用名稱:" + name);
at.setName(name);
}
}
}
if(e5.attr("class").equals("detail")) {
about=e5.childNode(0).outerHtml();
System.out.println("簡介:" + about);
at.setAbout(about);
}
}
}
if(e4.attr("class").equals("s-index-down s-index-icon tjitem")) {
downloadUrl=e4.attr("href");
System.out.println("下載下傳位址:" + downloadUrl);
at.setDownloadUrl(downloadUrl);
}
}
}
}
appTests.add(at);
}
}
}
}
return appTests;
}
private static void parseDetailPage(AppTest at, String url) {
Document doc=null;
String imgsUrl="";
try {
doc=Jsoup.connect(url).get();
} catch(IOException e) {
System.out.println("二級連接配接失敗!");
e.printStackTrace();
}
Elements uls=doc.getElementsByTag("ul");
for(Element ul: uls) {
if(ul.attr("class").equals("screen cls data-screenshots")) {
Elements lis=ul.getElementsByTag("li");
for(Element li: lis) {
for(Element img: li.children()) {
String imgUrl=img.attr("src");
System.out.println("截圖:" + imgUrl);
imgsUrl+=imgUrl + "@";
}
at.setImgs(imgsUrl);
}
}
}
Elements divs=doc.getElementsByTag("div");
for(Element div: divs) {
if(div.attr("class").equals("brief-des")) {
StringBuffer sb=new StringBuffer();
for(Node n: div.childNodes()) {
sb.append(n.outerHtml().replace("<br />", "\r\n"));
}
System.out.println("詳細介紹:" + sb.toString());
at.setDetail(sb.toString());
}
}
Elements spans=doc.getElementsByTag("span");
for(Element span: spans) {
if(span.attr("id").equals("params-catename")) {
String type=span.childNode(0).outerHtml();
System.out.println("遊戲類别:" + type);
at.setType(type);
}
if(span.attr("id").equals("params-size")) {
String size=span.childNode(0).outerHtml();
System.out.println("遊戲大小:" + size);
at.setSize(size);
}
if(span.attr("id").equals("params-vname")) {
String version=span.childNode(0).outerHtml();
System.out.println("遊戲版本:" + version);
at.setVersion(version);
}
}
}
}