2020年11月29日 星期日

[少用PTT之1] 用 Google 試算表訂閱 ptt 看版 -- 使用 ImportXML


身為資深鄉民,每個時期關注不同的看版(一路從高中、黑特、八卦、手機、路跑、買房到…媽寶…),通常真正有用的訊息,來自較多人推文討論或者乎應的文章。當優質文章被看完以後,腦袋會進入資訊缺乏的焦慮,趨使著手指,不斷想辦法找出更多有趣訊息。

手機版本的 PTT 軟體,則是看準了使用者對新訊息渴求,預設會提供不同看版的熱門文章。這些本來不在我關注主題範圍內的文章,也是這麼有趣,於是一點一滴的佔據我更多的時間。

因此,為了少花一點時間在 PTT 隨機漫步,我先去想『我到底想要看什麼?』接著,想辨法主動先篩選出我有興趣的資訊,避開軟體給我的、有趣但我其實並不關心的議題。

本來想要試著用一些 PTT 爬蟲,但後來發現,PTT 網頁版的功能已十分完整,甚至還有搜尋的功能,使用 Google 試算表裡簡單的 ImportXML 函數,就可以針對特定看板,用關鍵字或推文數,主動篩選出我們可能較關心且能增長見聞的內容。

方法

PTT網頁版提供結構化的資料,因此可以用 ImportXML 配合 XPath,取出我們需要的資料位置。而網頁版的搜尋功能,則是讓我們更快找到想要的文章。以棒球版為例,用以下的網址https://www.ptt.cc/bbs/Baseball/search?q=黑豹+recommend:40,就能找到標題有黑豹旗,且推文數在 40 以上的文章。 

直接偷看一下每一篇文章,其 HTML 都是如下的結構:

<div class="r-ent">
            <div class="nrec"><span class="hl f1"></span></div>
            <div class="title">            
                <a href="/bbs/Baseball/M.1606610530.A.0FA.html">[LIVE] 109 中信盃黑豹旗 11/29賽程</a>
            </div>
            <div class="meta">
                <div class="author">hicker</div>
                <div class="article-menu">

                    <div class="trigger"></div>
                    <div class="dropdown">
                        <div class="item"><a href="/bbs/Baseball/search?q=thread%3A%5BLIVE%5D+109+%E4%B8%AD%E4%BF%A1%E7%9B%83%E9%BB%91%E8%B1%B9%E6%97%97+11%2F29%E8%B3%BD%E7%A8%8B">搜尋同標題文章</a></div>

                        <div class="item"><a href="/bbs/Baseball/search?q=author%3Ahicker">搜尋看板內 hicker 的文章</a></div>

                    </div>

                </div>
                <div class="date">11/29</div>
                <div class="mark">M</div>
            </div>
        </div>

因為都有設定有意義的 className,我們可以直接用 XPath 的 class 篩選找到需要的欄位。例如,使用 //div[@class='title']/a,就可以選中<div class="title"><a><a/></div> 這個結構。

//div[@class='title']/a 中的 //,指的是在文件的任何地方出現指定結構,都會被找到。相對的,如果只有單斜線 /,表示要從文件的第一層 (root node) 開始找。詳細請看 W3schools 的介紹

直接在 Google sheet 中輸入以下的公式,就可以選出頁面裡所有的標題。

=importxml("https://www.ptt.cc/bbs/Baseball/search?q=黑豹+recommend:40","//div[@class='title']/a")

結果如下:

同理,使用以下的 XPath,就可以找到我們想要的其他資訊:

項目 HTML XPath
推文數 <div class="nrec"><span class="hl f1">爆</span></div> //div[@class=’nrec’]”
標題 <div class="title"><a href="...">標題</a></div> //div[@class=’title’]/a
網址 <div class="title"><a href="網址">標題</a></div> //div[@class=’title’]/a/@href
作者 <div class="author">hicker</div> //div[@class=’author’]

最後就是匯整了。把所有項目組合到同一張試算表,就可以取出我們可能會有興趣的資料。只要再點擊網址,就可以閱讀這些文章。

使用情境

  1. 特定看板的熱門文章。當然要把看板名稱和搜尋獨立出來。

  1. 我覺得非常有用的、二手物搜尋!有人賣馬上可以看到。

有興趣的朋友可以直接複製一份文件來玩玩。

更進一步

配合 Glide,就可以把上面的試算表變成手機 app!如果有時間,再寫個下篇和大家分享。

沒有留言

張貼留言