shell编写图片爬虫

    本例子来源于Linux shell Scripting Cookbook,自己简单注释下;

#!/bin/bash
#Description: Images downloader
#Filename: img_downloader.sh
# 校验参数个数 $# 代表参数个数, $0代表当前文件名称
if [ $# -ne 3 ]
then
    echo "Usage: $0 URL -d DIRECTORY"
    exit -1
fi
#循环解析参数
#也可以写成while格式的
#使用shift操作,直至参数不为空为止
#while [ -n "$0"]
#do
#case $1 in
# -d) shift;directory=$1;shift;;
#  *) url=$1;shift;;
#esac
#done
for i in { 1..4}
do
    case $1 in 
    -d) shift; directory=$1; shift ;;
     *) url=${url:-$1}; shift;;

esac
done

mkdir -p $directory;
#通过正则表达式,把传入的含有url的String,截取未标准的Url
baseurl=$(echo $url | egrep -o "https?://[a-z.]+")
#curl -s 获取url内容,并且不打印提示信息
curl -s $url | egrep -o "<img src=[^>]*>" |
sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list
sed -i "s|^/|$baseurl/|" /tmp/$$.list
cd $directory;
while read filename;
do
  curl -s -O "$filename" --silent
done </tmp/$$.list

   这里具体讲解下

egrep -o "<img src=[^>]*>"

   egrep 相当与 grep -e 后面可以用正则表达式来索引内容。[^>]* 表示一直到不为 '>'的前面的所有的内容。这一步主要是把<img src="xxx"  ..  >这中内容提取出来。

sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list

   sed 后面跟的正则表达式格式 一般是 's/ \( \) /\1/g' ,其中 \1代表是前面第一个匹配上的正则表达式的引用,如果有多个就可以写成 's/\( \)  \(  \)/\1 \2/g' ,比如我们想把两个字母翻转 可以写成 echo 'ab' | sed 's/\(.\)\(.\)/\2\1/' 。

$$代表当前进程的id。把得到的结果放到$$.list中。

sed -i "s|^/|$baseurl/|" /tmp/$$.list

   这句话的作用是把那些图片中以相对路径 '/'开头 替换成当前的上下文。

while read filename;
do
  curl -s -O "$filename" --silent
done </tmp/$$.list

   把$$.list中的url按行读到filename中,curl 后面跟的是-O 不是0。

    转发标注来源  http://my.oschina.net/robinyao/blog/402068

   END----------------------------------


转载于:https://my.oschina.net/robinyao/blog/402068

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapyd 是一个 Python 爬虫框架,可以用来管理和部署爬虫。如果你想在 Linux 系统上编写一个 shell 脚本来启动 Scrapyd 并将其放在后台运行,可以按照以下步骤: 1. 首先,需要确保 Scrapyd 已经安装并且可以正常运行。可以在终端中执行以下命令来检查 Scrapyd 版本号: ``` scrapyd -v ``` 如果输出了 Scrapyd 的版本号,说明 Scrapyd 已经安装成功了。 2. 然后,创建一个名为 `start_scrapyd.sh` 的文件,用于编写启动 Scrapyd 的 shell 脚本。 ``` touch start_scrapyd.sh ``` 3. 编辑 `start_scrapyd.sh` 文件,写入以下内容: ```bash #!/bin/bash # 启动 scrapyd echo "Starting scrapyd..." scrapyd & # 输出 scrapyd 运行状态 echo "Scrapyd is running now." ``` 在上面的脚本中,我们首先使用 `echo` 命令输出一条信息,表示正在启动 Scrapyd。然后,使用 `scrapyd &` 命令启动 Scrapyd 并将其放在后台运行。最后,再次使用 `echo` 命令输出一条信息,表示 Scrapyd 已经开始运行了。 4. 给 `start_scrapyd.sh` 文件添加执行权限: ``` chmod +x start_scrapyd.sh ``` 5. 现在,可以在终端中执行以下命令来启动 Scrapyd: ``` ./start_scrapyd.sh ``` 执行以上命令后,会输出一条信息表示正在启动 Scrapyd,然后就会立即返回到命令行提示符,而 Scrapyd 将会在后台继续运行。 如果想要停止 Scrapyd,可以在终端中执行以下命令: ``` pkill -f scrapyd ``` 以上命令会杀死所有名为 `scrapyd` 的进程,从而停止 Scrapyd 的运行。 希望以上步骤可以帮助你编写一个启动 Scrapyd 的 shell 脚本,并将其放在后台运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值