0%

Shell+Curl实现网页爬虫

使用shell和curl监测海贼王的更新并发邮件到邮箱!

一.项目描述

为了能进入导师实验室,师兄分给我一个项目,用shell脚本和curl实现一个网络爬虫,主要功能是检测某个网站海贼王的更新信息,当有最新剧集更新时发送邮件提醒。作为对我的考验,刚开始我没有思路,学了一段时间的shell脚本,又从网上查了一些资料,但感觉没思路;后来问了一个软件学院的师兄,可以用正则表达式匹配出最大值,与上一次的值比较,大于则发送邮件。

二.源码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#Function: 监测海贼王更新并提醒
#Author: pengshp
#Time: 2015-9
#! /bin/bash

URL="http://www.fzdm.com/manhua/002/"
LOG_DIR=${HOME}/logs

#发送邮件函数
smail(){
mail -s "更新提醒" $MAIL << EOF
==================================
Report Time: `date +"%F %T"`
Current User: `whoami`
海贼王已经有更新,请打开下列链接前往观看!
风之动漫:
http://www.fzdm.com/manhua/002/
===================================
EOF
}

read -p "Please input your 163 mail: " MAIL
Result=`curl -o /dev/null -s -m 10 --connect-timeout 10 -w %{http_code} $URL`
Test=`echo $Result`

#监测网站是否可以正常访问
if [ "$Test" == "200" ]
then
4if [ ! -f $LOG_DIR ]
4then
44mkdir -p $LOG_DIR
4fi
4cd $LOG_DIR
4touch log.txt
4let Value1=800 #现在最新是800话
4while true
4do
44curl -s -o page.html http://www.fzdm.com/manhua/002/
44#利用正则表达式获取HTML文件中最新的剧集的值
44let Value=$(cat page.html |grep 'title="海贼王[0-9].*"' |sed -n '1p' |awk -F '"' '{print $4}' |cut -d '/' -f1)
44if [ $Value -gt $Value1 ]
44then
444smail
444echo "successfully! `date` " >> log.txt
444let Value1=Value #更新最新的剧集
44fi
44rm page.html
44sleep 300
4done
fi

程序中用到mail命令,需要自己配置相应的环境,把要发送的内容封装起来,以EOF结尾。接受的邮箱可以自己定义。

如果对你有帮助,请我喝杯奶茶吧!
pengshp 微信

微信

pengshp 支付宝

支付宝

欢迎关注我的其它发布渠道