AndroID主题开发者做的主题,如果想代替第三方应用图标,就必须要知道应用的包名。其实想知道应用的包名很简单,直接在浏览器打开Google Play或豌豆荚,打开某应用的页面,看网址你就会发现,网址最后“/”字符后接的就是应用的包名!
估计有人想把常用应用的图标和包名都搞下来,所以用java写了个小程序,批量抓取了豌豆荚上“全部软件”按总下载量排名里1到20页的应用图标与包名。
所有图标都用包名来命名的,里面还有一个packagename.txt文件,包含了应用名称对应的包名,方便查找。
java源码
分享这个java小程序,注意,如果豌豆荚的网页结构变了(估计很少改变吧),这个小程序就需要修改一下了,如果看得懂的话,修改很简单的咯。
以下代码可能已失效,仅作参考!
复制代码 代码如下:
package im.garth.AppIconDownloader;
import java.io.BuffereDWriter;
import java.io.file;
import java.io.fileOutputStream;
import java.io.fileWriter;
import java.io.IOException;
import java.io.inputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map.Entry;
import org.apache.http.httpentity;
import org.apache.http.httpResponse;
import org.apache.http.httpStatus;
import org.apache.http.clIEnt.httpClIEnt;
import org.apache.http.clIEnt.methods.httpGet;
import org.apache.http.impl.clIEnt.DefaulthttpClIEnt;
import org.apache.http.util.EntityUtils;
import org.Jsoup.Jsoup;
import org.Jsoup.nodes.document;
import org.Jsoup.nodes.Element;
import org.Jsoup.select.Elements;
/**
* 获取豌豆荚网页上安卓软件全部软件
* 注意:执行程序前,一定要在这个工程目录下创建icon文件夹
* 所有图标将下载到icon这个文件夹中
* 应用名称与包名写到了icon下的packagename.txt文件里
*
* 这个程序用到的jar包:
* commons-logging-1.1.3.jar
* httpclIEnt-4.1.2.jar
* httpcore-4.3.jar
* Jsoup-1.6.1.jar
*
*
*/
public class AppIconDownloader {
/**
* @param args
*/
public static voID main(String[] args) {
String rootUrl = "http://www.wandoujia.com/tag/全部软件/total?page=";
//String rootUrl = "http://www.wandoujia.com/tag/全部游戏/total?page=";
//下载1到20页的应用图标
for(int i = 1; i < = 20; i++) {
System.out.println("【下载进度】:准备下载第" + i + "页");
String currentUrl = rootUrl + i;
HashMap<String,String> apps = new HashMap<string,String>();
apps = getAppImageUrl(currentUrl);
//遍历HashMap逐个下载图标
for(Entry</string><string,String> entry : apps.entrySet()) {
try{
//下载图标,存储到当前工程目录下的icon目录(请事先创建icon目录)
download(entry.getValue(),"icon/" + entry.getKey() + ".png");
}catch(Exception e) {
System.out.println("【下载出错】:" + entry.getKey());
e.printstacktrace();
}
}
System.out.println("【下载进度】:第" + i + "页下载完成");
}
}
/**
* 获取url网页里的所有应用的应用名及其图标网址
* @param appPackagename
* @return
*/
private static HashMap</string><string,String> getAppImageUrl(String url) {
HashMap</string><string,String> apps = new HashMap</string><string,String>();
String appPackagename = "";
String appImageUrl = "";
String appname = "";
String HTML = getHTMLByUrl(url);
document doc = Jsoup.parse(HTML);
Elements elements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-List.clearfix>li.app>a.icon-area");
Elements nameElements = doc.select("div.container.clearfix>section.main-col>div.app-blocks>div.app-block>ul.app-List.clearfix>li.app>div.operate>a.name>span.txt");
Elements imageEle;
int i = 0;
for(Element ele : elements) {
//获取包名
appPackagename = ele.attr("data-pn");
//获取图标网址
imageEle = ele.select("img.icon");
appImageUrl = imageEle.get(0).attr("src").replace("68_68","256_256");
//加入apps
apps.put(appPackagename,appImageUrl);
//获取app名称
appname = nameElements.get(i).text();
//把app名称和包名输出到文件
write2file("【" + appname + "】" + appPackagename);
i++;
}
System.out.println("【下载进度】:" + url + "下的图标网址已经获取成功");
return apps;
}
/**
* 下载文件到本地
*
* @param urlString
* 被下载的文件地址
* @param filename
* 本地文件名
* @throws Exception
* 各种异常
*/
private static voID download(String urlString,String filename) throws Exception {
System.out.println("【下载进度】:正在下载" + filename);
// 构造URL
URL url = new URL(urlString);
// 打开连接
URLConnection con = url.openConnection();
// 输入流
inputStream is = con.getinputStream();
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流
OutputStream os = new fileOutputStream(filename);
// 开始读取
while ((len = is.read(bs)) != -1) {
os.write(bs,len);
}
// 完毕,关闭所有链接
os.close();
is.close();
System.out.println("【下载进度】:" + filename + "下载成功");
}
/**
* 根据URL获得所有的HTML信息
* @param url
* @return HTML
*/
private static String getHTMLByUrl(String url){
String HTML = null;
//创建httpClIEnt对象
httpClIEnt httpClIEnt = new DefaulthttpClIEnt();
//以get方式请求该URL
httpGet httpget = new httpGet(url);
try {
//得到responce对象
httpResponse responce = httpClIEnt.execute(httpget);
//返回码
int resstatu = responce.getStatusline().getStatusCode();
//200正常 其他就不对
if (resstatu==httpStatus.SC_OK) {
//获得相应实体
httpentity entity = responce.getEntity();
if (entity!=null) {
//获得HTML源代码
HTML = EntityUtils.toString(entity);
}
}
} catch (Exception e) {
System.out.println("访问【"+url+"】出现异常!");
e.printstacktrace();
} finally {
httpClIEnt.getConnectionManager().shutdown();
}
return HTML;
}
private static voID write2file(String content) {
file file = new file("icon/packagename.txt");
BuffereDWriter writer = null;
try{
if(!file.exists()) {
file.createNewfile();
}
//参数true表示将输出追加到文件内容的末尾而不覆盖原来的内容
writer = new BuffereDWriter(new fileWriter(file,true));
//输出内容
writer.write(content);
//换行
writer.newline();
} catch(IOException e){
System.out.println("输出出错");
e.printstacktrace();
} finally {
if( writer != null) {
try {
writer.close();
} catch(IOException e) {
e.printstacktrace();
}
}
}
}
}
以上是内存溢出为你收集整理的java批量采集豌豆荚网站Android应用图标和包名全部内容,希望文章能够帮你解决java批量采集豌豆荚网站Android应用图标和包名所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)