起因

看到室友在爬一个网站 (某个作文类的阅读网站), 用的是 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