[四星]写一个脚本,自动找到相关图书和价格
- oneleaf
- 论坛管理员
- 帖子: 10448
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
[四星]写一个脚本,自动找到相关图书和价格
1 任务内容: 写一个脚本,根据输入的关键词,自动到当当/卓越/新华书店去搜索到书籍和价格,并按价格排序显示为 ”来源 图书名称 价格“ 列表。
2 任务的难度: 四星
3 任务的目的: 掌握bash和相关模拟提交http请求
4 任务所涉及的软件: bash [wget/w3m]
5 任务将大致消耗的时间: 3~5天
6 任务涉及网站: http://www.dangdang.com/ http://www.amazon.cn/ http://www.xinhuabookstore.com/
2 任务的难度: 四星
3 任务的目的: 掌握bash和相关模拟提交http请求
4 任务所涉及的软件: bash [wget/w3m]
5 任务将大致消耗的时间: 3~5天
6 任务涉及网站: http://www.dangdang.com/ http://www.amazon.cn/ http://www.xinhuabookstore.com/
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: [四星]写一个脚本,自动找到相关图书和价格
有些搜索会有很多哦,到底要几条还是都要阿?
- oneleaf
- 论坛管理员
- 帖子: 10448
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: [四星]写一个脚本,自动找到相关图书和价格
都要xiooli 写了:有些搜索会有很多哦,到底要几条还是都要阿?
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: [四星]写一个脚本,自动找到相关图书和价格
奥克,mark
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: [四星]写一个脚本,自动找到相关图书和价格
完成!
注意: 由于所有的条目均会获取,故而在搜索出很多项目时会剧慢无比,无忍耐力者请谨慎尝试。。。
代码: 全选
用法: ./booksearch.sh keyword
代码: 全选
#!/bin/bash
# Author xiooli <xioooli[at]yahoo.com.cn>
# 2009.09.22
dangdang() {
local url key page maxpage
key="$(iconv -f utf8 -t gbk <<< "$1"|uni2ascii -a J)"
page=1
url="http://search.book.dangdang.com/search.aspx?key=${key}&page=${page}&order=1"
maxpage="`w3m -dump_source "$url"|grep -m1 -o "maxPage=.*;"|grep -o "[0-9]*"`"
if [ x"$maxpage" != x ]; then
for page in `seq 1 "$maxpage"`; do
url="http://search.book.dangdang.com/search.aspx?key=${key}&page=${page}&order=1"
w3m -dump "$url" \
|awk '/\[page_down\]|\[buttom_gou\]|\[button_det\]|\[enregister\]/{
getline
tmp=$0
getline
if($0 ~ /^$/ && tmp !~ /\[next/)
{printf "当当网 "tmp
} else if(tmp !~ /\[next/) {
printf "当当网 "tmp$0}
}
/¥/{print " 价格: "$1}' \
|sed "s/¥[^¥]*//;s/折扣.*//"
done
echo
fi
}
amazon() {
local url key page maxnum maxpage
key="$(iconv -f utf8 -t gbk <<< "$1"|uni2ascii -a J)"
page=1
url="http://www.amazon.cn/s?pageletid=headsearch&searchType=&i=books&keywords=${key}&Go.x=0&Go.y=0&searchKind=keyword&sort=price&page=${page}"
maxnum="$(wget "$url" -q -O-|grep -o "class=\"resultCount\"[^<]*<"\
|grep -o [0-9,]*|tail -n1|tr -d ",")"
if [ "$(($maxnum%12))" != 0 ]; then
maxpage=$(($maxnum/12+1))
else
maxpage=$(($maxnum/12))
fi
if [ x"$maxpage" != x ]; then
for page in `seq 1 "$maxpage"`; do
url="http://www.amazon.cn/s?pageletid=headsearch&searchType=&i=books&keywords=${key}&Go.x=0&Go.y=0&searchKind=keyword&sort=price&page=${page}"
wget "$url" -q -O- \
|awk -F"[<>]" '/srTitle/{printf "亚马逊 "$5}
/saleprice/{if ($11 ~ /[0-9]/)print " 价格: "$11}'
done
echo
fi
}
xinhua(){
local url key page maxpage
key="$(echo "$1"|uni2ascii -a J)"
page=1
url="http://www.xinhuabookstore.com/search/?pagination.currentPage=${page}&pagination.pageSize=20&pagination.skipSize=10&Submit.y=16&Submit.x=40&keyword=${key}"
maxpage="$(wget "$url" -q -O-|grep -o "条 .* 页"|awk '{print $2}')"
if [ x"$maxpage" != x ]; then
for page in `seq 1 "$maxpage"`; do
url="http://www.xinhuabookstore.com/search/?pagination.currentPage=${page}&pagination.pageSize=20&pagination.skipSize=10&Submit.y=16&Submit.x=40&keyword=${key}"
wget "$url" -q -O- \
|awk -F"[<>]" '/class=\"fontb_2\"/{printf "新华网 "$9}
/class=\"price3\"/{print " 价格: ¥ "$15}'
done
echo
fi
}
{
dangdang $1
amazon $1
xinhua $1
}|sort -t ¥ -k2 -n
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: [四星]写一个脚本,自动找到相关图书和价格
晕哦,都没人顶,没意思。。。
- oneleaf
- 论坛管理员
- 帖子: 10448
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: [四星]写一个脚本,自动找到相关图书和价格
这两个错误该如何处理?sort: 多字符标签 “¥”
./booksearch.sh: line 40: %12: 语法出错:此处需要运算符 (error token is "%12")
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: [四星]写一个脚本,自动找到相关图书和价格
额?你搜的啥呀,难道没有搜索出东西,那就给maxnum赋一个默认值,还有那个sort的问题,我在arch上没有这种提示,可能是复制粘贴的问题,我直接附上文件吧。oneleaf 写了:这两个错误该如何处理?sort: 多字符标签 “¥”
./booksearch.sh: line 40: %12: 语法出错:此处需要运算符 (error token is "%12")
您没有权限查看这个主题的附件。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 1028
- 注册时间: 2008-11-01 21:42
- 来自: 树下板凳
- yaoms
- 帖子: 4952
- 注册时间: 2007-10-19 14:51
- 来自: 深圳
Re: [四星]写一个脚本,自动找到相关图书和价格
xiooli 写了:晕哦,都没人顶,没意思。。。
代码: 全选
$ booksearch perl
/home/yaoms/bin/booksearch: line 9: uni2ascii: command not found
/home/yaoms/bin/booksearch: line 12: w3m: command not found
/home/yaoms/bin/booksearch: line 35: uni2ascii: command not found
/home/yaoms/bin/booksearch: line 40: %12: syntax error: operand expected (error token is "%12")
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
alias 爱慕颇雷尔='mplayer'
- yaoms
- 帖子: 4952
- 注册时间: 2007-10-19 14:51
- 来自: 深圳
- thunderdrum
- 帖子: 27
- 注册时间: 2009-02-12 9:39
Re: [四星]写一个脚本,自动找到相关图书和价格
我来顶~
很好的学习机会。
很好的学习机会。
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: [四星]写一个脚本,自动找到相关图书和价格
ee写一个15行以内的大家来围观eexpress 写了:你缩到15行。就有人顶。xiooli 写了:晕哦,都没人顶,没意思。。。
perl的不会,期待ee阿姨的perl版本yaoms 写了:建议用 纯 perl 实现。