AJsoup
AJsoup 模塊是快速將html 轉(zhuǎn)換成bean 類似gson轉(zhuǎn)換
依賴 jsoup
使用前提你了解jsoup并且了解jsoup的Select
Gradle
compile 'com.github.zdongcoding:ajsoup:0.1.0'
Maven
<dependency>
<groupId>com.github.zdongcoding</groupId>
<artifactId>ajsoup</artifactId>
<version>0.1.0</version>
<type>pom</type>
</dependency>
使用方法如下:
bean.java
@Select(select = "body")
public class HomeBean {
@Select(select = "div > div > div.listbox")
public HotTopTabBean hotTopTabBean; //熱門數(shù)據(jù)
@Select(select = "div#nav > ul > li[id]", attr = "id")
public Map<String, NavBean> navBeans;
@Select(select = "div#nav-under > ul >li:has(a)") //排除無(wú) <a 標(biāo)簽
public List<NavBean> navUnderBeans;
@Select(select = "div#body > div.left.noborder.clearfix.block1 > ul")
public List<LatestVideoBean> latests;
@Select(select = "div#header-in > div > ul#hot-words > li")
public List<WebBean> searchbeans;
}
String html=....;
HomeBean bean=AJsoupReader.deserialize(Jsoup.parse(html), HomeBean.class);
AJsoup---->Converter-Ajsoup
使用過(guò)Retrofit 一看這個(gè)名字就知道做什么的
Gradle
compile 'com.github.zdongcoding:converter-ajsoup:0.1.0'
Maven
<dependency>
<groupId>com.github.zdongcoding</groupId>
<artifactId>converter-ajsoup</artifactId>
<version>0.1.0</version>
<type>pom</type>
</dependency>
使用方法:
Api.java
public interface Api {
@GET("{url}")
Observable<String> getPage(@Path(value = "url",encoded = true) String url);
}
api = new Retrofit.Builder().baseUrl(baseUri)
.addConverterFactory(JsoupConverterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build().create(Api.class);
api.getPage("").subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<HomeBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(HomeBean homeBean) {
view.setText(homeBean.toString());
}
});
選擇器概要(Selector overview)
- Tagname:通過(guò)標(biāo)簽查找元素(例如:a)
- ns|tag:通過(guò)標(biāo)簽在命名空間查找元素萤悴,例如:fb|name查找<fb:name>元素
-
id:通過(guò)ID查找元素,例如#logo
- .class:通過(guò)類型名稱查找元素,例如.masthead
- [attribute]:帶有屬性的元素免都,例如[href]
- [attr]:帶有名稱前綴的元素酗电,例如[data-]查找HTML5帶有數(shù)據(jù)集(dataset)屬性的元素
- [attr=value]:帶有屬性值的元素月洛,例如[width=500]
- [attr^=value]婉徘,[attr$=value]藏研,[attr=value]:包含屬性且其值以value開(kāi)頭敬矩、結(jié)尾或包含value的元素,例 如[href*=/path/]
- [attr=regex]:屬性值滿足正則表達(dá)式的元素蠢挡,例如img[src=(?i).(png|jpe?g)]
- :所有元素弧岳,例如
- 選擇器組合方法
- el#id::帶有ID的元素ID,例如div#logo
- el.class:帶類型的元素袒哥,例如. div.masthead
- el[attr]:包含屬性的元素缩筛,例如a[href]
- 任意組合:例如a[href].highlight
- ancestor child:繼承自某祖(父)元素的子元素,例如.body p查找“body”塊下的p元素
- parent > child:直接為父元素后代的子元素堡称,例如: div.content > pf查找p元素瞎抛,body > * 查找body元素的* 直系子元素
- siblingA + siblingB:查找由同級(jí)元素A前導(dǎo)的同級(jí)元素,例如div.head + div
- siblingA ~ siblingX:查找同級(jí)元素A前導(dǎo)的同級(jí)元素X例如h1 ~ p
- el, el, el:多個(gè)選擇器組合却紧,查找匹配任一選擇器的唯一元素桐臊,例如div.masthead, div.logo
- 偽選擇器(Pseudo selectors)
- :lt(n):查找索引值(即DOM樹(shù)中相對(duì)于其父元素的位置)小于n的同級(jí)元素胎撤,例如td:lt(3)
- :gt(n):查找查找索引值大于n的同級(jí)元素,例如div p:gt(2)
- :eq(n) :查找索引值等于n的同級(jí)元素断凶,例如form input:eq(1)
- :has(seletor):查找匹配選擇器包含元素的元素伤提,例如div:has(p)
- :not(selector):查找不匹配選擇器的元素,例如div:not(.logo)
- :contains(text):查找包含給定文本的元素认烁,大小寫銘感肿男,例如p:contains(jsoup)
- :containsOwn(text):查找直接包含給定文本的元素
- :matches(regex):查找其文本匹配指定的正則表達(dá)式的元素,例如div:matches((?i)login)
- :matchesOwn(regex):查找其自身文本匹配指定的正則表達(dá)式的元素
- 注意:上述偽選擇器是0-基數(shù)的却嗡,亦即第一個(gè)元素索引值為0舶沛,第二個(gè)元素index為1等
<font color=#ff0000 size=12 face="黑體">主要用到以上字段</font>
不需要服務(wù)器 就可以做一個(gè)快速做一個(gè)客戶端
完畢,就是這么簡(jiǎn)單
最后 :GitHub