在最近的一个网络爬虫项目中遇到了需要制作网络爬虫,网上看了一下htmlparser和httpclient的一些文章,半懂不懂就开始做了。总体的理解就是httpclient是用来创建连接的,而真正执行网页页面分析的是htmlparser,源代码部分我就不解析了,网上大把文章我贴一个我看到的比较全面一点的文章:网络爬虫制作
在制作爬虫的过程中有个技巧:
建议用httpclient创建连接把网页下载下来,这样使用文本解析工具,一边写代码,一边对照出问题的网页部分,可以加快进度,解决Bug。推荐一个文本阅读工具Notepade+,相当给力。它能够自动给你解析HTML的节点。你甚至可以用它来写程序~~~~~
回归正题,通过上面的文章,大概你就明白该怎么制作了,这里只提出一个我搞了一天的问题,额~~~~~其实是因为我不懂js还有网页制作,不然也不会那么难。
<tr>
<td bgcolor="#F9F9F9" class="blackmid pd" height="46"> E-mail:</td>
<td bgcolor="#FFFFFF" class="pd midtext"><script type="text/javascript">
//<![CDATA[
var l=new Array();
l[0]='>';l[1]='a';l[2]='/';l[3]='<';l[4]='|109';l[5]='|111';l[6]='|99';l[7]='|46';l[8]='|97';l[9]='|110';l[10]='|105';l[11]='|104';l[12]='|99';l[13]='|50';l[14]='|101';l[15]='|103';l[16]='|100';l[17]='|105';l[18]='|114';l[19]='|98';l[20]='|97';l[21]='|64';l[22]='|97';l[23]='|115';l[24]='|111';l[25]='|114';l[26]='>';l[27]='"';l[28]='|109';l[29]='|111';l[30]='|99';l[31]='|46';l[32]='|97';l[33]='|110';l[34]='|105';l[35]='|104';l[36]='|99';l[37]='|50';l[38]='|101';l[39]='|103';l[40]='|100';l[41]='|105';l[42]='|114';l[43]='|98';l[44]='|97';l[45]='|64';l[46]='|97';l[47]='|115';l[48]='|111';l[49]='|114';l[50]='';l[51]=':';l[52]='o';l[53]='t';l[54]='l';l[55]='i';l[56]='a';l[57]='m';l[58]='"';l[59]='=';l[60]='f';l[61]='e';l[62]='r';l[63]='h';l[64]=' ';l[65]='"';l[66]='t';l[67]='x';l[68]='e';l[69]='t';l[70]='d';l[71]='i';l[72]='m';l[73]='"';l[74]='=';l[75]='s';l[76]='s';l[77]='a';l[78]='l';l[79]='c';l[80]=' ';l[81]='a';l[82]='<';
for (var i = l.length-1; i >= 0; i=i-1){
if (l[i].substring(0, 1) == '|') document.write("&#"+unescape(l[i].substring(1))+";");
else document.write(unescape(l[i]));}
//]]>
</script></td>
</tr>
上面就是我遇到的一段邮箱的代码,刚开始我怎么抓文本都抓不到邮箱。在html文件里面也find不到任何关于@或者邮箱数字的关键字。其实作者是通过js没有执行前,网页的源码已经被你拉回来的特性,反低级爬虫。那么我们如何解析这一段文字呢?
我使用一小段代码,大概的思想很简单。仔细一点,你可以把上面的var l数组打印出来,打印出来后你会发现,其实它只有一行。
那么我使用split("\n")就可以分割字符串,而取出对应数组元素赋值那一行即可。最后你可以使用substring截取数组的有效段。其实,就是依葫芦画瓢,把js的执行过程大概重复一次即可。再次使用split分割上一步得到的字符串,最后做个简单的判断,比如例子里面作者使用“|”开头标识有效字段。最后,作者很恶心的在数组里面重复了邮箱,这个也需要大家根据实际情况去辨别,那些unescape其实只是迷惑我们这些个小白的,根本就没起作用。
写完了,其实,难点就是个邮箱,当然,还有一些输出到excel的东东,那就很简单了。还是不说了。。。
说的不对的地方,请斧正。。。