PHP实现最简单爬虫原型

来源:互联网 发布:淘宝店铺布局怎么设计 编辑:程序博客网 时间:2024/05/16 14:35
<?php/** * 爬虫程序 -- 原型 * * BookMoth 2009-02-21 *//** * 从给定的url获取html内容 * * @param string $url * @return string */function _getUrlContent($url) {    $handle = fopen($url, "r");    if ($handle) {        $content = stream_get_contents($handle, 1024 * 1024);        return $content;    } else {        return false;    }}/** * 从html内容中筛选链接 * * @param string $web_content * @return array */function _filterUrl($web_content) {    $reg_tag_a = '/<[a|A].*?href=[\'\"]{0,1}([^>\'\"\ ]*).*?>/';    $result = preg_match_all($reg_tag_a, $web_content, $match_result);    if ($result) {        return $match_result[1];    }}/** * 修正相对路径 * * @param string $base_url * @param array $url_list * @return array */function _reviseUrl($base_url, $url_list) {    $url_info = parse_url($base_url);    $base_url = $url_info["scheme"] . '://';    if ($url_info["user"] && $url_info["pass"]) {        $base_url .= $url_info["user"] . ":" . $url_info["pass"] . "@";    }    $base_url .= $url_info["host"];    if ($url_info["port"]) {        $base_url .= ":" . $url_info["port"];    }    $base_url .= $url_info["path"];    print_r($base_url);    if (is_array($url_list)) {        foreach ($url_list as $url_item) {            if (preg_match('/^http/', $url_item)) {                //已经是完整的url                $result[] = $url_item;            } else {                //不完整的url                $real_url = $base_url . '/' . $url_item;                $result[] = $real_url;            }        }        return $result;    } else {        return;    }}/** * 爬虫 * * @param string $url * @return array */function crawler($url) {    $content = _getUrlContent($url);    if ($content) {        $url_list = _reviseUrl($url, _filterUrl($content));        if ($url_list) {            return $url_list;        } else {            return;        }    } else {        return;    }}/** * 测试用主程序 * */function main() {    $current_url = "http://hao123.com/"; //初始url    $fp_puts = fopen("url.txt", "ab"); //记录url列表    $fp_gets = fopen("url.txt", "r"); //保存url列表    do {        $result_url_arr = crawler($current_url);        if ($result_url_arr) {            foreach ($result_url_arr as $url) {                fputs($fp_puts, $url . "\r\n");            }        }    } while ($current_url = fgets($fp_gets, 1024)); //不断获得url}main();?> 


最简单的爬虫模型应该是这样的:给一个初始url,爬虫把内容扒下拉,找页面里的url,在以这些url为起点,开始爬。


上面是一个最简单的php实现的爬虫模型。


当然这只爬虫还需要进行下面的进化才可以:

1、拼接更准确的url链接。现在的链接有可能是格式错误的。

2、能够去掉重复的url链接。现在的爬虫会做非常多非常多的重复工作。

3、避免爬虫怕成环路,一个永远右转的车,只能是300内环,它只会跑在三环路上,去不了别的地方。

4、多线程或者多进程。因为php没有线程的概念,所以可能需要shell这样的东西来模拟了。

5、……略去2的N次方个汉字。

反正是意思一下就好了~


转自:http://www.xjq123.com/html/33/n-13433.html点击打开链接