对网页文章进行采集(适合小说采集)[第二次编辑]

 

#----------------------------------------------------------#

# ====>  红色字体 -特指煮酒个人所见。加粗则为需要重点注意。 #
# ====>  蓝色加粗 -特指与本文相关人员,包括参与修正的朋友。 #
# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com          #
#----------------------------------------------------------#

第一次更新:解决乱码问题。

老男孩老师QQ密我,无意中产生兴趣,并进行尝试。于是就有下面的过程:

----------------------

老男孩 14:11:56 
兄弟
老男孩 14:12:10 
http://book.51cto.com/art/201202/314590.htm 推荐你看看。
老男孩 14:12:35 
另外,能否用你的脚本 批量下来 改名?
老男孩 14:12:40 

老男孩 14:14:55 
一道SHELL题:
 http://book.51cto.com/art/201202/314590.htm
用脚本 批量下载文章,然后改成中文对应名称?

第二次更新:嵌套命令

煮酒品茶:还是原来那个问题sed -n "?"p filename问题,由于学到shell方面有更方便的操作,原来那个是大小嵌套,学shell时有写到$()那我们最终的脚本如下。

 

 
 
  1. j=0  
  2. for ((i=314494;i<=314561;i++))  
  3. do  
  4. wget http://book.51cto.com/art/201202/$i.htm  
  5. $((++j))  
  6. cat $i.htm |grep ^\<title\>|sed 's/<title>//g'|sed 's/<\/title>//g'|sed 's/\ //g'|sed 's/-51CTO.COM//g'|iconv -f gb2312 -t utf-8  >>title.htm  
  7. sed '1,/<p><p>/ D' $i.htm | sed '/align=right>/,$d' |sed 's/<br>//g'|sed 's/<\/p>//g' |sed 's/<p>//g' >$j.htm  
  8. mv $j.htm $(sed -n "$j"p title.htm)$j.htm  
  9. done  
  10. rm -rf 3* *title*  
-------------------------- 
打开:http://book.51cto.com/art/201202/314590.htm 发现是书的试看页。后面一想,如果把这个脚本写好,是不是可以用于小说采集?直接开工。
 
发现规律:
开始:http://book.51cto.com/art/201202/314494.htm 
结尾:http://book.51cto.com/art/201202/314561.htm
那么可以用我们的以前写过的脚本下载:
--------------------
 
 
  1. for ((i=314494;i<=314561;i++)) 
  2. do 
  3. wget http://book.51cto.com/art/201202/$i.htm 
  4. done 

---------------------------
下载后发现是一个htm的文档,
-----------------------
.........省略N行。
        var favor_url = 'http://book.51cto.com/art/201202/314494.htm';  // È磺http://bbs.51cto.com/thread-789649-1.html
        var favor_title = 'Ç°ÑÔ';       //
 
        //°ó¶¨¸´ÖÆ°´Å¥
        copy('msnqqcopy', 'http://book.51cto.com/art/201202/314494.htm', '·ÖÏíµ½MSN/QQµÄÁ´½Ó¸´ÖƳɹ¦!');
//      copy('bbscopy', '[url=http://book.51cto.com/art/201202/314494.htm][u]Ç°ÑÔ[/u][/url]', '·ÖÏíµ½ÂÛ̳µÄUBB´úÂ븴ÖƳɹ¦!');
 
</script>
<script src=" http://home.51cto.com/index.php?s=/Index/getLoginStatus/reback/http%253A%252F%252Fbook.51cto.com%252Fart%252F201202%252F314494.htm" charset='utf-8'></script>
<script src="http://www.51cto.com/php/count.php?view=yes&artID=314494" language="javascript"></script>
<script language="javascript">
document.getElementById('books').innerHTML = document.getElementById("bookss").innerHTML;
</script>
 
</body>
</html>
 
-----------------------
但是我想要的是:
------------------------------
著名漫画家朱德庸曾经写过这样一句话:你可以不上学,可以不上网,可以不上当,但你就是不能不上班。看似
 
诙谐,却很深刻地反映了现代职场人的生活。在人的一生中绝大部分的时间都贡献给了工作,办公室已然成为职场人重
 
要的生存场所,上班已经成为不可回避的主题。职场中竞争激烈,多少能力卓绝的职场高手没有输在业务水平
 
上,而是输在一些细枝末节上。每个人都需要知道职场中的诸多底线,有时候你的一些小过失,虽然眼前看来无伤大雅
 
,但如果不够警惕,就会让你的职场道路凭空增添许多障碍。你是否争强好胜,时常得理不饶人?你是否习惯
 
性地逃避责任,不能勇于承担工作任务?你是否被同事排挤,却又不明所以?你是否工作业绩喜人,却总也无法获得上
 
司的赏识?你是否跟上司没大没小,没有眼色地乱开上司的玩笑?你是否爱出风头,常常抢夺别人的功劳?你是否疑惑
 
别人都能升职加薪,唯独你却总是徘徊在职场边缘?很多职场人通常都意识不到,自己身上存在什么样的弊病
 
。因为缺点一旦搁在别人身上,总是会被无限放大,反之自身有相同过失,却总是视而不见。所有工作问题的出现都与
 
个人的行为有关,不论是单一的性格过失,还是与他人交往中的行为过失,甚或在工作过程中冒出头的职业道德过失,
 
都会让你陷入职业僵局。本书共分六章,理论联系实例,通过各种浅显易懂的例子,由表及里,由浅入深,总
 
结职场中可能出现的50个过失,深刻剖析导致职场不顺利的不为人知的原因,告诉读者什么是不能触犯的,如何避免发
 
生职场过失。同时提醒读者把握好其中的分寸,看清楚各种行为方式的后果,让读者在职场中进退有度,顺利发展。
-------------------------------------------------
于是开始查找规律
1、内容从<p><p>开始并在文中是唯一
2、内容从<DIV align=right>结束并在文中是唯一
3、去除多余的东西,<p></p><br>
进行编辑:
----------------------------------
 
 
   
  1. sed '1,/<p><p>/ D' $i.htm | sed '/align=right>/,$d' |sed 's/<br>//g'|sed 's/<\/p>//g' |sed 's/<p>//g' >$j.htm 
------------------------------
看下效果:其中$j值是生成文件名,$i值是下载好的文件名。
------------------------
 
[root@bogon a]# sed '1,/<p><p>/ D' 314494.htm | sed '/align=right>/,$d' |sed 's/<br>//g'|sed 's/<\/p>//g' |sed 's/<p>//g' >a.htm
---------------------------------------
 
 

 

下一步是找到标题,并想办法指重命名。

那篇文章写了,

mv filename 'sed -n "$i"p filename2'进行批量。我们先获取到。

先做思考:

1、在下载好的文件中经过比较发现<title>与</title>中间就是我们所需之标题。

2、sed中不允许有空格发生,所以进行替换。并去除不相关的内容。

-------------------------------------

 
  
  1. cat $i.htm |grep ^\<title\>|sed 's/<title>//g'|sed 's/<\/title>//g'|sed 's/\ //g'|sed 's/-51CTO.COM//g' >>title.htm 

-------------------------------------------

 

 

思路已完,然后进行脚本整合:

 

 
  
  1. set -x 
  2. j=0 
  3. for ((i=314494;i<=314561;i++)) 
  4. do 
  5. wget http://book.51cto.com/art/201202/$i.htm 
  6. $((++j)) 
  7. echo $j 
  8. cat $i.htm |grep ^\<title\>|sed 's/<title>//g'|sed 's/<\/title>//g'|sed 's/\ //g'|sed 's/-51CTO.COM//g' >>title.htm 
  9. sed '1,/<p><p>/ D' $i.htm | sed '/align=right>/,$d' |sed 's/<br>//g'|sed 's/<\/p>//g' |sed 's/<p>//g' >$j.htm 
  10. echo $j.htm $j 
  11. mv $j.htm `sed -n "$j"p title.htm`$j.htm 
  12. rm 3* -rf 
  13. done 

----------------------------

煮酒品茶:方便的话在后面加一个rm -rf title.htm

最终效果:

 

 

煮酒品茶:这里显示的是乱码,有些可显示有些不可显示,估计是编码的问题。现在已是0.44,先去睡觉,明天再测测。

老男孩老师指导了一下:所以进行更新:

 

 

[2楼]        老男孩oldboy 删除 
2012-05-11 10:39:17
我也沙发一下,非常赞!分析需求,找到规律,是重中之重!
编码问题可以调整客户端与服务端字符集。或者通过iconv命令来转换:
例:
[oldboy@student ~]$ cat oldboy.log 
?o¢linux?????? QQ31333741
[oldboy@student ~]$ iconv -f gb2312 -t utf-8 oldboy.log 
老男孩linux运维实战培训 QQ31333741

 

对脚本进行更改以及优化:

 
  
  1. [root@bogon 51cto]# cat down 
  2. set -x 
  3. j=0 
  4. for ((i=314494;i<=314561;i++)) 
  5. do 
  6. wget http://book.51cto.com/art/201202/$i.htm 
  7. $((++j)) 
  8. cat $i.htm |grep ^\<title\>|sed 's/<title>//g'|sed 's/<\/title>//g'|sed 's/\ //g'|sed 's/-51CTO.COM//g'|iconv -f gb2312 -t utf-8  >>title.htm 
  9. sed '1,/<p><p>/ D' $i.htm | sed '/align=right>/,$d' |sed 's/<br>//g'|sed 's/<\/p>//g' |sed 's/<p>//g' >$j.htm 
  10. mv $j.htm `sed -n "$j"p title.htm`$j.htm 
  11. done 
  12. rm -rf 3* *title* 

 看下效果:

----------------------------------------------

 

[root@bogon 51cto]# ls

down                                           过失19好出风头,锋芒太过(1)66.htm

前言1.htm                                      过失19好出风头,锋芒太过(2)67.htm

过失10缺乏信用,欠钱不还(1)33.htm            过失19好出风头,锋芒太过(3)68.htm

过失10缺乏信用,欠钱不还(2)34.htm            过失1说话太直,口无遮拦(1)2.htm

过失10缺乏信用,欠钱不还(3)35.htm            过失1说话太直,口无遮拦(2)3.htm

过失11遭遇小人,被其利用(1)36.htm            过失1说话太直,口无遮拦(3)4.htm

过失11遭遇小人,被其利用(2)37.htm            过失2无视上司,自作主张(1)5.htm

过失11遭遇小人,被其利用(3)38.htm            过失2无视上司,自作主张(2)6.htm

过失11遭遇小人,被其利用(4)39.htm            过失2无视上司,自作主张(3)7.htm

过失11遭遇小人,被其利用(5)40.htm            过失3议论上司,不懂忌讳(1)8.htm

过失12独享荣耀,抢夺功劳(1)41.htm            过失3议论上司,不懂忌讳(2)9.htm

过失12独享荣耀,抢夺功劳(2)42.htm            过失3议论上司,不懂忌讳(3)10.htm

过失12独享荣耀,抢夺功劳(3)43.htm            过失3议论上司,不懂忌讳(4)11.htm

过失12独享荣耀,抢夺功劳(4)44.htm            过失4顶撞老板,不服从安排(1)12.htm

过失13故作幽默,乱开玩笑(1)45.htm            过失4顶撞老板,不服从安排(2)13.htm

过失13故作幽默,乱开玩笑(2)46.htm            过失5好拍马屁,不注重自我提升(1)14.htm

过失13故作幽默,乱开玩笑(3)47.htm            过失5好拍马屁,不注重自我提升(2)15.htm

过失14不被接受,人际紧张(1)48.htm            过失5好拍马屁,不注重自我提升(3)16.htm

过失14不被接受,人际紧张(2)49.htm            过失6大事不请示,小事瞎汇报(1)17.htm

过失14不被接受,人际紧张(3)50.htm            过失6大事不请示,小事瞎汇报(2)18.htm

过失14不被接受,人际紧张(4)51.htm            过失6大事不请示,小事瞎汇报(3)19.htm

过失15参与是非,陷入同事纷争(1)52.htm        过失6大事不请示,小事瞎汇报(4)20.htm

过失15参与是非,陷入同事纷争(2)53.htm        过失6大事不请示,小事瞎汇报(5)21.htm

过失15参与是非,陷入同事纷争(3)54.htm        过失7过于张扬,爱做上司代言人(1)22.htm

过失16爱说八卦,为达目的不择“嘴”段(1)55.htm  过失7过于张扬,爱做上司代言人(2)23.htm

过失16爱说八卦,为达目的不择“嘴”段(2)56.htm  过失8领导夹菜你转盘儿,领导讲话你插嘴(1)24.htm

过失16爱说八卦,为达目的不择“嘴”段(3)57.htm  过失8领导夹菜你转盘儿,领导讲话你插嘴(2)25.htm

过失17与上司或同事发展办公室恋情(1)58.htm    过失8领导夹菜你转盘儿,领导讲话你插嘴(3)26.htm

过失17与上司或同事发展办公室恋情(2)59.htm    过失8领导夹菜你转盘儿,领导讲话你插嘴(4)27.htm

过失17与上司或同事发展办公室恋情(3)60.htm    过失8领导夹菜你转盘儿,领导讲话你插嘴(5)28.htm

过失18自视甚高,眼高手低(2)62.htm            过失9大大咧咧,东西乱扔(1)29.htm

过失18自视甚高,眼高手低(3)63.htm            过失9大大咧咧,东西乱扔(2)30.htm

过失18自视甚高,眼高手低(4)64.htm            过失9大大咧咧,东西乱扔(3)31.htm

过失18自视甚高,眼高手低(5)65.htm            过失9大大咧咧,东西乱扔(4)32.htm

过失18自视甚高,眼高手低61.htm

[root@bogon 51cto]# 

----------------------------------------------------------------

 

总结要点:

1、首先对整个过程要有一个大概念的思路,规律下载,规律去除不需要的内容,规律拿标题。批量改名字。

2、对文件查找要很熟悉,不然无法进行下去。以及正则。

3、最终写出最简洁的脚本,当然我的脚本可能不是最简洁的。 

煮酒品茶:在进行编辑时品茶正好看到了视平菲在菲地烧华人商店,18死,20来人伤!心里很难平静,一股无名之火无从发出,但一想国情,不能说也不敢说。只能忍着。或许中国根本就不需要爱国的人吧,因为理智爱国嘛。现在爽了


谢谢DN833、老男孩oldboy对sed的指导,也是自己学shell过程中并没有太多的实践,只是先加快速度阅读并理解书中意思。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值