火车采集器软件交流官方论坛

 找回密码
 加入会员
搜索
火车采集器V9版免费下载火车浏览器 - 可视采集,万能群发,全自动脚本工具
查看: 5574|回复: 8

重大发现,可防火车头采集的神奇网页【请官方回复】

[复制链接]
发表于 2009-6-20 04:32:14 | 显示全部楼层 |阅读模式
本帖最后由 hiqq 于 2009-6-20 07:07 编辑

一朋友让我测试了一宿,始终没能找到采集到内容的办法,无奈,先将测试网页地址发布,寻求高人切磋:

http://www.jianshe23.cn/test.htm
(非伪静态网址,失效时间为2009年6月30日)

测试要求,将<body></body>之间的内容完整提取出来
  1. <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>火车头信息采集测试</title></head><body> 火车头信息采集测试内容</body></html>
复制代码
代码很简单,肉眼看不出问题,请务必用我提供的地址测试,你可能会感觉是件很容易的事情,那你错了,用火车头采集器采集试试!

不要认为我吹牛,一般人搞不定。如果你发现了其中的奥秘,那对于防火车头采集又会有新的认识。

恳请火车头采集器官方作出回应。
发表于 2009-6-20 05:16:22 | 显示全部楼层
搞定~~~~~~
 楼主| 发表于 2009-6-20 06:20:07 | 显示全部楼层
2# luring

真的么,怎么做的?
 楼主| 发表于 2009-6-20 07:01:32 | 显示全部楼层
本帖最后由 hiqq 于 2009-6-20 07:12 编辑

采用php程序将网页源代码采集过来,截取body里的数据,并查看每个字符的asii编码。

  1. $str =  @file_get_contents('http://www.jianshe23.cn/test.htm');
  2. $str&&preg_match_all('/<body>([\s\S]*?)<\/body>/i',$str$m);
  3. $str = $m[1][0];
  4. $n = $tn = $n1 = 0;
  5. echo $str.'<br>';
  6. echo '字符|编码<br>';

  7. while($n < strlen($str))
  8. {
  9.         $t = ord($str[$n]);
  10.         $n1 = $n ;
  11.         if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
  12.                 $tn = 1; $n++; $noc++;
  13.         } elseif(194 <= $t && $t <= 223) {
  14.                 $tn = 2; $n += 2;
  15.         } elseif(224 <= $t && $t <= 239) {
  16.                 $tn = 3; $n += 3;
  17.         } elseif(240 <= $t && $t <= 247) {
  18.                 $tn = 4; $n += 4;
  19.         } elseif(248 <= $t && $t <= 251) {
  20.                 $tn = 5; $n += 5;
  21.         } elseif($t == 252 || $t == 253) {
  22.                 $tn = 6; $n += 6;
  23.         } else {
  24.                 $n++;
  25.         }
  26.         $tstr = '';
  27.         for($i=$n1;$i<$n;$i++){
  28.         $tstr .='\\'.ord($str[$i]);        
  29.         }
  30.         
  31.         echo substr($str, $n1, $tn).'|'.$tstr.'<br>';
  32. }
复制代码
===输出结果===

火车头信息采集测试内容
字符|编码
|\0
火|\231\129\171
车|\232\189\166
头|\229\164\180
信|\228\191\161
息|\230\129\175
采|\233\135\135
集|\233\155\134
测|\230\181\139
试|\232\175\149
内|\229\134\133
容|\229\174\185
==========
终于找到了一点眉目,内容中藏有null字符,即ascii码值为0的。
但是即使使用正则表达式:
  1. <body>(?<content>[\s\S]*?)</body>
复制代码
也还是采集不了!大家都来想想办法吧!
发表于 2009-6-20 09:24:42 | 显示全部楼层
该页面可以采集。
这个功能是提供给收费版用户的.免费版暂时不支持.
 楼主| 发表于 2009-6-20 20:35:54 | 显示全部楼层
收费版是怎么实现的,能说说原理么?
是不是在免费版本里刻意屏蔽了对null字符的采集?
 楼主| 发表于 2009-6-23 10:09:27 | 显示全部楼层
自己写采集程序做中转,可以实现了
发表于 2009-6-23 10:58:23 | 显示全部楼层
写采集程序做中转,好像很复杂啊
发表于 2009-6-23 12:12:39 | 显示全部楼层
楼上的正解 做一个proxy就可以了
您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

QQ|手机版|Archiver|火车采集器官方站 ( 皖ICP备06000549 )

GMT+8, 2025-5-20 04:59

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表