刮网页的有效方法

时间:2012-10-22 16:44:52

标签: php substring web-scraping

  

可能重复:
  How to parse and process HTML with PHP?

我想检索网页的页眉和页脚(所有者知道这一点)并将其显示在新页面上,以便我可以添加不同的内容。该页面结构非常漂亮,div内容为id内容,所以我想我可以做到以下几点:

使用CURL检索html 在内容的任一侧获取HTML 回到新页面

我的问题是我不太懂PHP,所以我不确定如何在两侧使用两块html。我之前在Java中使用过substring,但PHP中的substr似乎有点不同。有人可以建议替代方案吗?

由于

3 个答案:

答案 0 :(得分:2)

Substring和RegEx不是处理HTML的足够工具。使用DOM解析器最好(也更容易)。

看看DOMDocument class。它支持加载HTML,并允许您轻松遍历文档。

答案 1 :(得分:1)

要抓取我使用HTML DOM parser的网页。这对你来说是最简单的方法。 您可以在此帖子中找到更多工具:How to parse and process HTML with PHP?

答案 2 :(得分:0)

前几天我做了类似的事情。我选择使用jQuery,Ajax和PHP来收集页面并将其分解。我已经包含了我的代码的稀释版本。

对于PHP,我使用了CURL(get-url.php):

$requestURL = $_GET['url'];
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $requestURL);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl_handle, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl_handle, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl_handle, CURLOPT_DNS_USE_GLOBAL_CACHE, FALSE);
curl_setopt($curl_handle, CURLOPT_FORBID_REUSE, TRUE);
$content = curl_exec($curl_handle);
curl_close($curl_handle);
echo $content;

然后对于我使用的Ajax:

var url = /* URL you want to retrieve */;
$.ajax({
        url: "get-url.php?url=" + url,
        type: "GET",
        dataType: "html",
        cache: false,
        success: function(data, textStatus, jqXHR){
            var header = data.find('#header').html();
            var footer = data.find('#footer').html();
            $(header_DOM).html(header);
            $(footer_DOM).html(footer);
        }
    });

这只是一个指南。改变这个想法以满足您的需求。