1
$html = file_get_html('http://www.livelifedrive.com/');  
echo $html->plaintext;

我抓取其他网站没有问题,但这个特定的网站返回乱码。
它是加密的还是什么?

4

4 回答 4

0

没有什么像网站加密那样真正的,如果内容可以到达您的浏览器并且是 HTML,它可以被抓取。

这可能是因为该站点使用了大量的 Javascript 和 Flash 无法被 HTML 解析器抓取。甚至 Google 本身也刚刚开始涉足精确抓取 Flash 和 Javascript。

要在浏览器的荣耀中抓取网站,请尝试 Selenium。

链接:

              https://code.google.com/p/php-webdriver-bindings/

              https://groups.google.com/forum/#!topic/selenium-users/Rj6BYEkz9Q0

一个巧妙的提示,知道您可以使用 HTML 抓取器抓取什么,尝试在您的浏览器上禁用 Javascript 和 Flash 并加载网站。您可以查看的内容很容易被抓取 - 其余的您必须在您的方法上更聪明一点。

于 2013-12-31T10:17:27.010 回答
0

也许他们服务器上的文件没有保存为 UTF-8?我已经在几个站点上尝试了您的功能,有时它可以工作(在服务器上,我知道他们将文件保存为 UTF-8,而不仅仅是说明这些文件是用 UTF-8 编码的),有时它会产生乱码。

尝试在本地机器上自己测试,解析保存为 UTF-8 和其他编码的文件,看看会发生什么......

于 2013-12-31T10:29:12.957 回答
0

实际上,您看到的乱码是 GZIPed 内容。

例如,当我使用hurl.it获取内容时,服务器返回的标头如下:

GET http://www.livelifedrive.com/malaysia/(网址 http://www.livelifedrive.com/ 解析为 http://www.livelifedrive.com/malaysia/)

连接:保持活动
Content-Encoding: gzip   <--- 内容被压缩
内容长度:18202
内容类型:文本/html;字符集=UTF-8
日期:2013 年 12 月 31 日星期二 10:35:42 GMT
P3p: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
服务器:nginx/1.4.2
变化:接受编码,用户代理
X-Powered-By: PHP/5.2.17

因此,一旦您抓取了内容,请将其解压缩。这是一个示例代码:

if ( ! function_exists('gzdecode'))
{
    /**
     * Decode gz coded data
     * 
     * http://php.net/manual/en/function.gzdecode.php
     * 
     * Alternative: http://digitalpbk.com/php/file_get_contents-garbled-gzip-encoding-website-scraping
     * 
     * @param string $data gzencoded data
     * @return string inflated data
     */
    function gzdecode($data) 
    {
        // strip header and footer and inflate

        return gzinflate(substr($data, 10, -8));
    }
}

参考:

于 2013-12-31T10:38:16.690 回答
0
$html->plaintext;

这只会给你文本,但如果你需要获取 html,那么你需要使用

$html->innertext;

有关更多信息,您可以参考http://simplehtmldom.sourceforge.net/manual.htm

于 2013-12-31T10:39:11.040 回答