【问题标题】:PHP Simple HTML DOM Parser returns gibberishPHP Simple HTML DOM Parser 返回乱码
【发布时间】:2020-12-25 19:03:27
【问题描述】:
$html = file_get_html('http://www.livelifedrive.com/');  
echo $html->plaintext;

我可以抓取其他网站,但这个特定的网站返回乱码。
是加密的还是什么的?

【问题讨论】:

标签: php simpledom


【解决方案1】:

其实你看到的乱码是GZIPed内容。

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

GET http://www.livelifedrive.com/malaysia/(网址 http://www.livelifedrive.com/ 解析为 http://www.livelifedrive.com/malaysia/) 连接:保持活动 Content-Encoding: gzip

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

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));
    }
}

参考资料:

【讨论】:

  • 效果很好!非常感谢。
【解决方案2】:

没有什么真的像网站加密,如果内容可以到达您的浏览器并且是 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 并加载网站。您可以查看的内容很容易可抓取 - 其余的您必须在方法上更加聪明。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我将 html 保存在本地机器上。把它放在本地网络服务器上。按预期进行刮削工作。很奇怪。
    【解决方案4】:
    $html->plaintext;
    

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

    $html->innertext;
    

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

    【讨论】:

      猜你喜欢
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2023-03-21
      • 2011-09-04
      • 1970-01-01
      相关资源
      最近更新 更多