使用Jsoup抓取百度的android apk

Danielmumu 2013-01-06

http://as.baidu.com/a/asgame?cid=102&s=1

此链接为百度安卓应用的页面

分析页面源码,写出适当的程序来获取想要的内容。(百度的页面写的非常规则,喜欢看这种页面使用Jsoup抓取百度的android apk)

把内容入库,再通过编写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);
      }
    }
  }
}
 

相关推荐