java批量收集豌豆莢網站Android運用圖標和包名。本站提示廣大學習愛好者:(java批量收集豌豆莢網站Android運用圖標和包名)文章只能為提供參考,不一定能成為您想要的結果。以下是java批量收集豌豆莢網站Android運用圖標和包名正文
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, 0, 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();
}
}
}
}
}