嗯,花了3天整的时间,从0构建起了一个常用WEB程序的爬虫。
这个构建计划从4个月前开始就已经计划过了。因为各种原因被长时间搁浅。4天前推掉了从朋友那边结果来的一个小爬虫脚本,开始思忖将自己这个一直因为赖床而搁浅掉的计划逐渐吃下。
鉴于现在多数WEB APPLICATION是禁止ROBOT的,我也暂时不放出脚本成品和脚本内容。只说一下这几天调试过程中遇到的一些小问题,顺便总结一下BASH脚本编写的一些新手常见问题。
一开始写的时候就有人吐槽——为神马用BASH而不用程序语言?
——。。ECLIPSE已经卸掉了,除非后期有需要,否则暂无改写计划。况且BASH作为LINUX系统的最常见的脚本语言,脚本可经简单修改后随同BUSYBOX写入嵌入式系统中,在实际应用中虽然比C/PYTHON/RUBY的适用性差点,不过作为一个个人爬虫脚本来说足矣。
倘若哪天自己不用这个WEB APP了,估计会将代码全部放出吧。暂时这里只留一些笔记。
1:Curl对于跳转有安全因素考虑,故跨域名登录默认是关闭的,需要开启--location-trusted参数才会默认跳转
2:BASH字符串的解释问题$USERNAME_abc默认是不会被BASH解释的,需要改写成${USERNAME}_abc这样的形式
3:GREP命令,巧用-o参数(仅仅输出符合正则表达式的字符串)和sed -n来进行节点筛选。
4:CURL模拟XML请求:
curl -H 'X-Requested-With: XMLHttpRequest' …
5:CURL的参数问题
折腾了一下午加一个晚上,才发现自己哪里搞错了。
curl -h|grep POST
-d/--data <data> HTTP POST data (H)
--data-ascii <data> HTTP POST ASCII data (H)
--data-binary <data> HTTP POST binary data (H)
--data-urlencode <name=data/name@filename> HTTP POST data url encoded (H)
-F/--form <name=content> Specify HTTP multipart POST data (H)
--form-string <name=string> Specify HTTP multipart POST data (H)
CURL的2种POST方式。
之前因为参考了MU的上传脚本,发现全部都是-F提交,才以为-F是提交表单,后来发现-F提交的MULTI-PART用的参数。。。233,我调试了一晚上啊。。。。(后来还是因为对比Content-Size后才突然醒悟过来,应该用-d来提交啊,233。以前一直都说,人一辈子浪费最多时间的事就是这种小错误。一个参数完全浪费了我一天,まあ,不过这样也算基本搞定第一阶段。
剩下就是把这些东西整理整理,写出自己的脚本。后面还有DWR请求和回复需要去读。不过大致看了看,比较简单。
-i和-I也是比较重要的2个参数,前者用于在输出页面的时候同时输出头文件,后者仅仅返回头文件。
嗯嗯,今天就这样了。
也就是从现在开始,从登录,到转向之类的东西基本完成。以后有时间或许会用JAVA改写成工具吧。 P.S.写东西的过程中善用参数-vvvv,实时查看包头信息,和FIREFOX的HTTP_LIVE_HEADER和CHROME的工作台对比使用,检查错误。最优化自己的作业。
6:echo 巧用-e参数
echo默认采用-E参数,在这个前提下,输出的字符串中的转义符将会被忽略,加上-e参数后,则能够正常运行。
7:curl的静默模式和VERBOSE模式,分别为-s和-vvvv
P.S.:Curl的静默模式配合管道依然可对变相赋值,如
tempPage=$(curl -s http://www.baidu.com)
8:BASH获取随机数:
expr $RANDOM % 120
10:UNICODE转码问题,多方测试无果,最后使用native2ascii解决,希望有人能够提出更好的办法。
有关调试问题。
用好CHROME的控制面板,还有FIREBUG,除此之外,用好NETCAT和HTTP LIVE HEADER和抓包工具来辅助自己检查自己的报文对为彭墙的时刻及其有效。应灵活应用。
有关BASH书写习惯问题。
不少写BASH脚本的都不曾仔细读过一些有关BASH编程的数目,脚本写出来复用性比较差,对于BASH编程推荐用书,首先读一读『鸟哥的linux私房菜』作为基础书目应该看一看。看过之后倘若还有兴趣,就来战ABS GUILD吧。
http://www.linuxsir.org/main/doc/abs/abs3.7cnhtm/index.html
在学习之前,首先练习练习常见文本处理工具如Sed/Awk/Grep等等,然后再上路会少走不少多余路。
最后,尤其注意多看官方文档,看之前读一读MAN文档 。这里对于302跳转自己就因为--location-trusted参数耽误了将近4个小时。很多莫名其妙的错误,GOOGLE并不一定能发现,多抓包,多对比,才是王道。
以上。