【发布时间】:2020-12-25 19:03:27
【问题描述】:
$html = file_get_html('http://www.livelifedrive.com/');
echo $html->plaintext;
我可以抓取其他网站,但这个特定的网站返回乱码。
是加密的还是什么的?
【问题讨论】:
-
您可能会发现这个问题很有用:stackoverflow.com/q/2914723/363573
$html = file_get_html('http://www.livelifedrive.com/');
echo $html->plaintext;
我可以抓取其他网站,但这个特定的网站返回乱码。
是加密的还是什么的?
【问题讨论】:
其实你看到的乱码是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));
}
}
参考资料:
【讨论】:
没有什么真的像网站加密,如果内容可以到达您的浏览器并且是 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 并加载网站。您可以查看的内容很容易可抓取 - 其余的您必须在方法上更加聪明。
【讨论】:
也许他们服务器上的文件没有保存为 UTF-8? 我已经在几个站点上尝试了您的功能,有时它可以工作(在服务器上,我知道他们将文件保存为 UTF-8,而不仅仅是说明这些文件是用 UTF-8 编码的),有时它会产生乱码。
尝试在本地机器上自行测试,解析保存为 UTF-8 和其他编码的文件,看看会发生什么...
【讨论】:
$html->plaintext;
这只会给你文本,但如果你需要获取 html,那么你需要使用
$html->innertext;
【讨论】: