需求:曾经买过一款考试软件,附送了一些网校的视频,而这些视频是放在他们自己的网盘上的,但是这个网盘是需要密码的,但是经过分析发现密码都是存在不同的html文件里的,并且还发现这些html文件的命名都是有规律的。所以准备些个小程序,来抓取这些网盘的密码。
开发记录
网址的批量抓取通过for循环来实现,比较容易。接下来碰到一个棘手的问题,就是如何提取内容。因为html文件里面没有用tag划分层次,所以所有内容都是一个大的文本块。遂翻了下PHP的字符串函数,发现两个函数,一个是 strstr()可以截取指定文字后的所有内容,还有一个是 substr()可以截取指定位置前的所有内容,这个函数还有一个搭配 strpos()用来定位指定的文字位置给它。ok,这样就取得了所需要的密码和课程名称。整个开发历时2个小时,最后还加了个保存成html的功能,可以把抓取的内容保存成html。
成果
PHP实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$i = 0; $to = 100; for($i;$i<=$to;$i++){ $url = 'http://www.bc150.com/book'.$i.'.html'; $html = file_get_html($url); if(!$html) echo 'not found'; else{ if($html->find("#UpdatePanel1",0)){ echo '<a href='.$url.'>'.$url.'</a><br/>'; // $key = $html->getElementById ( "#UpdatePanel1",0 )->plaintext; // echo $key.'<br/>'; $body = $html->plaintext; $body_name = strstr($body, '赠送资料'); $body_name = substr($body_name,0,strpos($body_name,'下载地址')); echo $body_name.'<br/>'; $body_download = strstr($body, '下载地址'); $body_download = substr($body_download,0,strpos($body_download,'访问密码')); echo $body_download.'<br/>'; $body_key = strstr($body, '访问密码'); $body_key = substr($body_key,0,strpos($body_key,'后续服务')); echo $body_key.'<br/>'; } ob_flush(); flush(); } } |
There are no comments yet