分页: 1 / 1

[原创]自己写的一个在北邮人论坛贴图秀版里边抓图的脚本,还不是很完善;-)

发表于 : 2007-05-20 17:47
stufever
恩,最近突然有了一种看法:
觉得既然学习linux,就不能天天去升级了,装一些不中用的图形界面软件了,搞什么beryl了,当然这些也是可以在轻松之余去弄弄的,但决不是每天一开电脑就去做,以为一段时间之后,你会发现自己面对电脑屏幕不知道该干什么了……
我发现linux最强大的还是她的命令行,还是那些经典的软件,就像各类的ftp客户端,我估计高手们肯定会认同lftp是无可替代的,不论是链接速度,功能各方面都相当强大,并且对中文的转换也很透明的。
还有我发现shell也是很强大的,她可以让你去做你想做的事情,去满足你的各种怪异的想法,等到我最近去学习的时候,才发现这是一个各大强人一展身手的地方,因为你可以用更简单的方法去做,大家也会很乐意帮助新手。
说了一些废话,呵呵,偏离主题了,不过上边这些算是我写这个脚本的原因吧;-)

大概介绍一下这个脚本:
其实说白了,就是去分析网页,呵呵,把图片的地址找到就OK了
我把网页地址集中到一个html里边,默认使用firefox来查看,你可以改用你自己喜欢的浏览器。

代码: 全选

  1 #!/bin/bash
  2  
  3 # 恩,对以前的版本的改进,使得可以更人性化一点,毕竟复制链接也是一件很麻烦的事:(
  4 # 可以显示第一页的标题,然后供选择,呵呵
  5 # 版本: 0.0.2
  6 # 日期: 2007年5月20日
  7 # 作者: stufever
  8 # 背景: byr上贴图秀里边的东东
  9  
 10 picture_board_url="http://forum.byr.edu.cn/wForum/board.php?name=Picture"
 11  
 12 wget -q $picture_board_url -O ttx
 13  
 14 # 把贴图秀版面上所有帖子的ID和名字过滤出来
 15 cat ttx | grep "origin"  | sed -e 's/(/\,/g' | sed -e 's/=/\,/g' | awk -F ',' '{print $3}' > dir_list
 16 rm ttx
 17  
 18 iconv -f gbk -t utf-8 dir_list > dir_list_utf
 19 rm dir_list
 20  
 21 # 本来这个地方是想把dir_list_utf里边的帖子名字输出出来的,但是因为要加上行号,我就想不出来该怎么办了
 22 # 恩,去论坛求助 http://forum.ubuntu.org.cn/viewtopic.php?p=304135#304135 要谢谢ziyun laborer兄!
 23  
 24 while true
 25 do
 26     sed -n 'n;p' dir_list_utf | nl
 27  
 28     echo ""
 29     echo -n "Some interested ? Input the number(n), or quit(q): "
 30     read c
 31     if [ $c = 'q' ] ; then
 32         echo "bye..."
 33         exit 1
 34     fi
 35 # 利用了dir_list_utf的特点,一行ID一行帖子名
 36     let c=2*${c}-1
 37     number=`sed -n "${c}p" dir_list_utf`
 38     ((c++))
 39     name=`sed -n "${c}p" dir_list_utf | sed -e "s/'/:/g"  | awk -F ":" '{print $2}'`
 40     echo $name
 41  
 42     tzurl="http://forum.byr.edu.cn/wForum/disparticle.php?boardName=Picture&ID=$number"
 43     baseurl="http://forum.byr.edu.cn/wForum/"
 44  
 45     echo "Begining..."
 46     wget -q $tzurl -O tz_wz
 47  
 48 # 这个地方要注释一下,要不就再也想不起来了;-)
 49 # "bid"的行里边有所有图片的信息,好像就是一个帖子吧;里边可能有不止一个图片,所以把它们变成多个行;
 50 # 然后把没用的行给过滤掉;之后的awk,就可以把有用的东西提取出来了;后边这个sed我也有点不解,因为awk之后,只剩一行了;
 51 # 后边的就是把网址变成需要的形式,pic_bottom里边就放着了该图片链接的后半部分
 52     cat tz_wz | grep "bid" | sed -e 's/<a href=/&\n/g' | grep "bbscon" |  awk -F '"' '{printf $2'\n'}' | sed -e 's/bbscon    /\nbbscon/g' | sed 1d | sed -e 's/&/\&/g' > pic_bottom
 53  
 54 # 把最后所有图片的网址放到一个html里边,这个地方可以改进,但是对html几乎不了解,就这样了
 55     for i in `sed -e '' pic_bottom`
 56     do
 57         echo "<img src="$baseurl$i"><br>" >> "$HOME/$name.html"
 58     done
 59  
 60     firefox "$HOME/$name.html"
 61     rm tz_wz  pic_bottom
 62     echo "If you like it, At firefox File-->Save as :)"
 63     rm "$HOME/$name.html"
 64  
 65     echo "done..."
 66  
 67 done
 68 rm dir_list_utf


发表于 : 2007-05-20 19:03
eexpress
针对网站解析地址是可以的。只是这网站好吗?我看是慢死了的。

发表于 : 2007-05-20 19:37
stufever
eexpress 写了:针对网站解析地址是可以的。只是这网站好吗?我看是慢死了的。
哦,这是我们学校论坛,呵呵,可能对外比较慢吧,教育网还行!

发表于 : 2007-06-02 20:31
Robinho
赞一下楼主,顺便请高手指点我写的自动从百度搜索并下载壁纸的脚本。

wp.sh

代码: 全选

#/bin/bash

if [ $# -ne 3  ] ; then
	echo "Usage:	`basename $0` THE_STUFF_TO_DOWNLOAD FROM TO"
	exit 1
fi

STUFF=`echo $1 | iconv -f utf8 -t gbk`

url4down1="http://image.baidu.com/i?ct=503316480\&z=5\&tn=|\
baiduimagedetai\&word=${STUFF}\&in="
url4down2="\&cl=2\&cm=1\&sc=0\&lm=-1\&pn="
url4down3="\&rn=1"

:>list

for ((  p = $2; p < $3; p++ )) ;  do
	((  i = p + 1 ))
	url4down=${url4down1}${i}${url4down2}${p}${url4down3}
	realurl=`lynx -source -connect_timeout=100 $url4down |\
	iconv -f gbk -t utf8 -c | grep "_top" |\
	sed -e 's/    //g' -e 's/<a href.[^>]*>//g' |\
	sed -e 's/<img src=\"//g' -e 's/".*//g'`
	name=`echo $realurl | sed -e 's/http.*\///g'`
	echo "Downloading picture $i"
	echo $realurl >> list
	if [ -e ${name} ] ; then
		echo "Picture has been downloaded. Ingore it."
	else	
		wget -c -t 3 -T 60 "${realurl}"
	fi
done
忘了,要安装lynx。sudo apt-get install lynx 当时觉得比wget快。。

$./wp.sh 美女 0 20
:P :P

发表于 : 2007-06-05 21:03
stufever
呵呵,如果改名为baidu_mm可能会更吸引人

发表于 : 2007-06-05 21:14
bones7456
恩,不错,哈哈!linux就该这么用.