iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
0
自我挑戰組

跟Kotlin一起來聊Android元件 或許還有應用,或許還有一些資訊雜談系列 第 25

Jsoup x Kotlin 靜態處理JavaScript取得內容

當使用Jsoup處理抓取網頁內容時,遇到要存取
<script>...</script>
內的變數或資料時,我們可以利用Pattern與Matcher來作處理。

照例先上程式碼

    var mString="<script>$(window).load(function(){ $('#if1').attr('src',\"https://url.TTT-testing.com/Demo/2_9auBB\"); });console.log(\"\");</script>"
    val doc = Jsoup.parse(mString)
    val searchScript = doc.select("script").first()
    val p = Pattern.compile("https://[a-zA-Z0-9._/-]+") 
    val m = p.matcher(searchScript.toString()) 
    while(m.find())
    {
        Log.d("Watching",m.group())
    }

要使用Pattern與Matcher我們需要用到java.util.regex

Pattern

透過使用Pattern的靜態compile方法,通常搭配正規表示法來撰寫匹配的規則。

val p = Pattern.compile("https://[a-zA-Z0-9._/-]+")

像是上面的例子,當我們要去抓取https://url.TTT-testing.com/Demo/2_9auBB這類開頭固定的網址文字,在使用正規表示式時開頭就可以使用https://。

之後的網址內容,包含了英文大小寫、數字、.句號、_底線、/斜線以及-短折號,那麼我們在使用正規表示式時,就需要定義

  • a-z 表示英文小寫a到z
  • A-Z 表示英文大寫A到Z
  • 0-9 表示數字0到9
  • ._/- 表示使用.句號、_底線、/斜線以及-短折號

最後我們規定了一個正規表示式為"https://[a-zA-Z0-9._/-]+"

備註 : 在[]後方我們多加了一個+號,表示[]內容會出現1到無限多次。

Matcher

規範好了正規表示式,就可以透過Matcher來檢查目標是否有符合我們條件的對象。

使用方法 val m = p.matcher(searchScript.toString())

篩選結果會回存到m.group()內。


上一篇
來聊Jsoup : JSOUP解析器
下一篇
Kotlin Standard Library : with、 run、 let 、apply、 also
系列文
跟Kotlin一起來聊Android元件 或許還有應用,或許還有一些資訊雜談30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言