`
simple1024
  • 浏览: 74319 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Jsoup抓取百度的android apk

阅读更多

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);
      }
    }
  }
}
 
1
3
分享到:
评论
4 楼 simple1024 2013-04-25  
muscle1990 写道
呃,import com.market.model.AppTest呢。。。

兄弟,AppTest只是一个实体类。存放一些自己需要的值。这个我看没什么贴的必要啊。
3 楼 muscle1990 2013-04-21  
呃,import com.market.model.AppTest呢。。。
2 楼 zxingchao2005 2013-01-06  
用jsoup解析html功能相当方便,值得推荐
1 楼 asialee 2013-01-06  
不错,我之前也用过jsoup,这个比较小,也不依赖其他的包,比较好用。

相关推荐

    Android项目源码简单利用jsoup爬取学校内网数据

    本项目是一个基于安卓的简单利用jsoup爬取学校内网数据的教务系统app,设计的部分有...javaapk之前也介绍过5个类似的教务项目,在搜素“教务”就可以找到。注意:本项目是android studio项目,eclipse可能无法直接导入。

    Android 抓取新闻

    在Android平台上,开发一款能够抓取并展示新闻的Demo应用程序涉及到多个关键的技术点。这个程序主要功能是从新浪、腾讯等知名新闻网站上获取最新的资讯,然后在用户界面中展示出来。下面将详细介绍这个过程涉及的...

    Android-芝士达人提取题目apk

    在Android开发领域,芝士达人是一款广受欢迎的答题类应用,而"Android-芝士达人提取题目apk"项目则是开发者为了方便从芝士超人应用中提取题目数据而创建的一个独立模块。这个模块的主要目标是对芝士超人的题目数据...

    笑话故事android应用源码.zip

    这个应用的核心功能是抓取网络上的笑话故事,可能是通过一个简单的网络爬虫技术实现的,这里使用的库是jsoup。 jsoup是一个Java库,专门用于处理实际世界中的HTML。它提供了非常方便的API,用于提取和操作数据,...

    android软件更新demo

    在Android应用开发中,软件更新是一项重要的功能,它确保用户始终使用的是最新、最安全的版本。本示例"android软件更新demo"聚焦于如何在Android应用中实现自动检查和下载更新的过程。以下是对这个demo的详细解读: ...

    apk下载链接搜索工具

    对于apk下载链接搜索,爬虫可能使用正则表达式或特定的解析库(如Python的BeautifulSoup或Jsoup)来识别和提取链接。了解HTML、CSS选择器和网络请求原理是使用爬虫的基础。 3. **apk链接筛选**:工具支持三种筛选...

    简单的新闻APP简单的新闻APP

    【简单的新闻APP】是一款基于Android平台的轻量级应用程序,其主要功能是通过jsoup库从互联网上抓取新闻内容并展示在用户界面上。jsoup是一个强大的Java库,专门用于处理和解析HTML,使开发者能够方便地提取和操作...

    爬取学校内网的个人信息

    总的来说,这个项目是一个融合了网络爬虫技术与Android应用开发的实践,它展示了如何使用Jsoup从学校内网抓取信息,并在Android设备上呈现。这样的应用对于提升个人技能,特别是在数据获取和移动应用开发方面,具有...

    邻居的耳朵ear 阅读apk

    这可能意味着应用使用了网络请求库(如OkHttp或Volley)和解析库(如Jsoup)来抓取和解析HTML页面,获取音乐链接和元数据。 5. **Libs目录**:`libs`目录包含了应用依赖的外部库或JAR文件,这些库可能包括音频播放...

    Android代码-新闻gif视频综合APP

    主要目的还是为了练习框架的使用。 目前已有的功能是 新闻,gif动图,视频播放。 此项目仅供学习用途 数据来源 新闻 直接用的聚合数据提供的接口 gif动图 通过jsoup爬的某个网页上的数据 视频 通过fiddler抓包某个...

    Android 电影简介分析源码.rar

    《Android 电影简介分析源码》是一个针对Android平台的项目,旨在实现对电影简介的抓取、解析和展示。在Android应用开发中,这样的功能通常用于构建电影信息查询或者推荐系统,为用户提供丰富的电影信息。这个项目的...

    android AppWidgetProvider httpclient 扒取网页

    这通常涉及DOM解析(Document Object Model)或者使用像Jsoup这样的库进行更友好的HTML解析。提取到数据后,可以将其格式化为适合App Widget显示的样式,如标题和摘要。 接下来,为了在App Widget上展示这些信息,...

    Android代码-Rss订阅源码Demo.zip

    - 数据解析:使用XML解析库(如`java.util.XMLPullParser`或第三方库如`Jsoup`)解析RSS feed。 3. **Android网络请求**: - 使用`java.net.URL`和`java.io.InputStream`进行基础的HTTP请求。 - 或者使用`...

    基于安卓的一个课表查询源码

    首先,我们要理解"基于安卓的一个课表查询源码"的标题意味着这个项目是一个实现了从学校网站抓取数据并将其展示在Android手机客户端的应用。这样的应用通常包括以下几个主要组成部分: 1. **网络请求**:应用程序...

    TianYaTuoShui

    例如,开发者可以使用Jsoup选择特定CSS选择器定位到帖子内容、作者信息、时间戳等关键元素,然后将这些元素整理成适配Android UI的格式。 在Android设备上实现这样的功能,需要掌握以下几个关键知识点: 1. ...

    某瘦_v1.2.1.zip

    9. **适配性**:作为APK文件,"某瘦"适用于Android操作系统。开发者需要考虑不同设备和Android版本的兼容性问题,确保应用能在广泛范围内运行。 通过《某瘦_v1.2.1.zip》提供的服务,用户无需逐个浏览蓝奏云网盘,...

Global site tag (gtag.js) - Google Analytics