【Nodejs】cheerio簡單示例

cheerio的API挺多,我也瞭解有限,欲知詳情請參考 「通讀cheerio API」。php

下面就事論事聊聊它的基本使用。html

好比說在某網頁中有這麼一段HTML:node

</tbody>        <tbody id="stickthread_8349137"   class="bs_bg1" >
            <tr>
                <td class="icon">
                                    <a href="chat.php?tid=8349137" title="聊天模式" target="_blank"><img src="images/icons/icon6.gif" alt="Icon15" class="icon" /></a>
                                </td>
                <th class="hot" >
                    <label>
                                                                <img src="images/2008/pin_1.gif" alt="本版置頂" title="本版置頂"/>
                                         </label>
                                                            <em>[<a href="forumdisplay.php?fid=8&amp;filter=type&amp;typeid=48">看盤</a>]</em>                                        <span id="thread_8349137" class="forumdisplay"><a href="thread-8349137-1-1.html" style="font-weight: bold;color: hotpink" target="_blank"> 2018年4月25日實時看盤交流 </a></span>
                                                                                    <img src="images/attachicons/common.gif" alt="附件" title="附件" class="attach" />
                                                            
                                                                <span class="threadpages"> &nbsp; <a href="thread-8349137-2-1.html">2</a> <a href="thread-8349137-3-1.html">3</a> <a href="thread-8349137-4-1.html">4</a> <a href="thread-8349137-5-1.html">5</a> <a href="thread-8349137-6-1.html">6</a>  .. <a href="thread-8349137-14-1.html">14</a> </span>
                    
                                                        </th>
                <td class="author">
                    <cite>
                                            <a href="space.php?action=viewpro&amp;uid=2713715">美人魚苗苗</a>
                                        </cite>
                                                                                                    <em class="ad_hong" >2018-4-24</em> 
                                    </td>
                <td class="nums"><strong>267</strong><em>4911</em></td>
                <td class="lastpost">
                    <cite><a href="space.php?action=viewpro&amp;username=%D6%F1%D4%B0%C7%E5">竹園清</a></cite>
                                                              <em><a href="redirect.php?tid=8349137&amp;goto=lastpost#lastpost"><font class="ad_hong">今天&nbsp;20:33</font></a></em>
                                    </td>
            </tr>
        </tbody>

注意上面代碼中加粗加下劃線的三個部分,它們是:數組

thread-8349137-1-1.html
2018年4月25日實時看盤交流
14dom

這三個量分別對應了帖子的地址,標題和共多少頁,若是要用cheerio取到它們該如何呢,請見代碼:post

            var buffer = Buffer.concat(html);

            var body = iconv.decode(buffer,'gb2312');
            var $ = cheerio.load(body);     // 這個$是整個網頁的dom      

            $("tbody").each(function(index,element){ // 先找到tody節點
                var $tbody=cheerio.load($(element).html());

                var topic={};
                topic.pageCount=1;
                topic.url=null;
                topic.title=null;

                $tbody(".forumdisplay a").each(function(index,element){     // 再找tbody節點裏的class=forumdisplay裏面的連接           
                    var topicUrl='http://www.55188.com/'+$tbody(element).attr("href"); // 獲得連接的屬性(第一項)
                    var topicTitle=$tbody(element).text();// 獲得連接的文字(第二項)

                    topic.url=topicUrl
                    topic.title=topicTitle;                        
                })

                $tbody(".threadpages").each(function(index,element){  // 再找tbody節點裏的class=threadpages節點
                    topic.pageCount=$tbody(element).children().last().text();// 找到最後一個子節點的文字(第三項)
                })
                
                if(topic.url!=null && topic.title!=null){
                    topics.push(topic);    // 加入數組
                }
            })

這樣就找到了須要的三個值。ui

相關文章
相關標籤/搜索