一鍵HTML 轉 Bean -- Ajsoup

AJsoup


API
API

author
author

AJsoup 模塊是快速將html 轉換成bean 類似gson轉換

依賴 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; //熱門數據
        @Select(select = "div#nav > ul > li[id]", attr = "id")
        public Map<String, NavBean> navBeans;
        @Select(select = "div#nav-under > ul >li:has(a)")  //排除無 <a 標簽
        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

使用過Retrofit 一看這個名字就知道做什么的

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:通過標簽查找元素(例如:a)
  • ns|tag:通過標簽在命名空間查找元素,例如:fb|name查找<fb:name>元素
  • id:通過ID查找元素,例如#logo

  • .class:通過類型名稱查找元素,例如.masthead
  • [attribute]:帶有屬性的元素,例如[href]
  • [attr]:帶有名稱前綴的元素,例如[data-]查找HTML5帶有數據集(dataset)屬性的元素
  • [attr=value]:帶有屬性值的元素,例如[width=500]
  • [attr^=value],[attr$=value],[attr=value]:包含屬性且其值以value開頭、結尾或包含value的元素,例 如[href*=/path/]
  • [attr=regex]:屬性值滿足正則表達式的元素,例如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:查找由同級元素A前導的同級元素,例如div.head + div
  • siblingA ~ siblingX:查找同級元素A前導的同級元素X例如h1 ~ p
  • el, el, el:多個選擇器組合,查找匹配任一選擇器的唯一元素,例如div.masthead, div.logo
  • 偽選擇器(Pseudo selectors)
  • :lt(n):查找索引值(即DOM樹中相對于其父元素的位置)小于n的同級元素,例如td:lt(3)
  • :gt(n):查找查找索引值大于n的同級元素,例如div p:gt(2)
  • :eq(n) :查找索引值等于n的同級元素,例如form input:eq(1)
  • :has(seletor):查找匹配選擇器包含元素的元素,例如div:has(p)
  • :not(selector):查找不匹配選擇器的元素,例如div:not(.logo)
  • :contains(text):查找包含給定文本的元素,大小寫銘感,例如p:contains(jsoup)
  • :containsOwn(text):查找直接包含給定文本的元素
  • :matches(regex):查找其文本匹配指定的正則表達式的元素,例如div:matches((?i)login)
  • :matchesOwn(regex):查找其自身文本匹配指定的正則表達式的元素
  • 注意:上述偽選擇器是0-基數的,亦即第一個元素索引值為0,第二個元素index為1等

<font color=#ff0000 size=12 face="黑體">主要用到以上字段</font>

不需要服務器 就可以做一個快速做一個客戶端

完畢,就是這么簡單

最后 :GitHub

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • [Jsoup Html頁面處理簡單用法] Jsoup工具可以把html文本映射為Dom對象,用更簡單的操作htm...
    ae7729ac3ac8閱讀 1,061評論 0 0
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,796評論 1 92
  • 使用選擇器語法來查找元素問題你想使用類似于CSS或jQuery的語法來查找和操作元素。方法可以使用Element....
    Mr_碼客閱讀 1,133評論 0 0
  • 這個select 方法在Document, Element,或Elements對象中都可以使用。且是上下文相關的,...
    藝龍閱讀 876評論 0 1
  • 一)jQuery九類選擇器【參見jQueryAPI.chm手冊】 目的:通過九類選擇器,能定位web頁面(HTML...
    奮斗的老王閱讀 1,048評論 0 51