起因

看到室友在爬一個網站 (某個作文類的閱讀網站), 用的是 Python,簡單看了一下代碼, 簡直慘不忍睹。

遂自告奮勇幫他爬,順便想蹭一頓飯。

特性

  • 自動抓取某分類下的所有頁面
  • 按照網站所顯示的樣式進行排版

TODO

  • 自動爬取下一頁
  • 輸出爲 .doc/.docx 格式

具體實現

直接上代碼 (雖然在 Linux 下一直用 Shell 在寫腳本,可很討厭 Shell 呢)。

#!/bin/bash

# @Author: 文正•喵
# @E-Mail: ivlioioilvi@outlook.com

#
# 獲取指某網站指定分類下的內容
#

# 某網站的指定分類
URL="https://xxxxx.xxxxxx.xxx/xxxxxx/xxxxxx/"

# 獲取頁面中的列表
get_Url_List() {
    # 獲取網站源碼
    curl -sL "$URL" |

    # 粗略過濾出內容列表
    grep '<div class="title"><a href="' |

    # 精確過濾出內容列表的 URL,並輸出到當前目錄
    awk 'BEGIN { FS = "\"|\"" } { print $4, $6 }' > URL-LIST.txt
}

# 執行 get_Url_List 函數
get_Url_List

get_Text() {
    # 定義內容的開始行號
    START_LINE="52"
    # 提取出內容的結束行號
    END_LINE=$(

    # 獲取指定頁面的源碼
    curl -sL "$1" |
    # 粗略過濾出結尾處
    grep -n '<a href="http://xxxxx.xxxxxx.xxx/xxxxxx/" title="作文" target="_blank">作文</a> http://xxxxx.xxxxxx.xxx/xxxxxx/' |
    # 精確過濾行號
    cut -f 1 -d ":")

    # 取得頁面的內容
    #
    # 建立用於存放所爬取內容的文件夾
    mkdir -p "所爬內容"
    # 獲取到頁面內容並格式化
    curl -sL "$1" |
    awk '/inner-box inner-content/,/title="作文" target="_blank"/{ print }' |
    sed 's/<div class="inner-box inner-content">  //' |
    sed 's/<br \/>//' |
    sed 's/\&\#39\;/\ /' |
    sed 's/\&quot\;/\“/' |
    sed '$d' |
    sed 's/<\/a>//g' |
    sed 's/<.*>//g' |
    sed '1s/^/  /' > "所爬內容/$2"
}

get_Content() {
    # 讀取已獲得的 URL 列表
    cat URL-LIST.txt |

    # 每次處理一行 URL
    while read -r one_Line
    do
        # 頁面鏈接
        URL_URL=$(echo "$one_Line" | cut -f1 -d " ")
        # 頁面名稱
        URL_NAME=$(echo "$one_Line" | cut -f2 -d " ")
        # 執行 get_Text 函數
        get_Text "$URL_URL" "$URL_NAME"
    done

    # 刪除已無用的文件
    rm -rf URL-LIST.txt
}

# 執行 get_Content 函數
get_Content