JAN

11

Tue

Author:EMINARCISSUS

被拍砖2次,接着砸!

嗯,花了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

获取0-120之间的随机数

9:像DWR提交AJAX请求的时候,由于发送的是PLAIN-TEXT,故CURL提交参数为--data-binary而非-d.注意配合NETCAT和FIREBUG进行请求调试。Content-Type通过设置头文件信息来定义

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并不一定能发现,多抓包,多对比,才是王道。

以上。

smiley