PHP简单HTML DOM解析器在有效URL上返回false

时间:2017-04-22 17:00:02

标签: php html5 web-scraping

我正在尝试以下方法:

$url = 'https://www.tripadvisor.es/Hotels-g187514-Madrid-Hotels.html'

$ta_html = file_get_html($url);
var_dump($ta_html);

它返回false,这是正常工作并正确获取html:

$url = 'https://www.tripadvisor.es/Hotels-g294316-Lima_Lima_Region-Hotels.html#ACCOM_OVERVIEW'

我的第一个想法是它有一个重定向,但我检查了卷曲和200的确定标题,两个案例看起来都是一样的。可能发生什么?如何解决?

这似乎是这个问题的重复:  Simple HTML DOM returning false也没有答案

5 个答案:

答案 0 :(得分:8)

似乎HTML DOM解析器失败,因为HTML文件大小大于库的最大文件大小。当您调用file_get_html()时,它会根据其MAX_FILE_SIZE常量进行文件大小检查。因此,在调用任何HTML DOM解析器方法之前,请通过调用以下命令增加库使用的最大文件大小:

define('MAX_FILE_SIZE', 1200000); // or larger if needed, default is 600000

正如您所发现的,您可以通过执行此操作来解决文件大小检查问题

$html = new simple_html_dom();
$html->load($str);

答案 1 :(得分:1)

所以我找到了解决方法:

let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)

说实话,我不知道为什么会这样,以及最初的问题是什么,如果有人能指出这一点,我将不胜感激

答案 2 :(得分:0)

由于simple_html_dom.php功能

中的file_get_html()检查,看起来这种情况正在发生
if (empty($contents) || strlen($contents) > MAX_FILE_SIZE)
{
    return false;
}

内容的长度可能大于MAX_FILE_SIZE

答案 3 :(得分:0)

希望它会为您提供帮助:

$base = $url;
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $base);
curl_setopt($curl, CURLOPT_REFERER, $base);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$str = curl_exec($curl);
curl_close($curl);

$html = new simple_html_dom();
$html->load($str);

答案 4 :(得分:-1)

使用file_get_contents()代替,对我有用。

$url = "https://www.tripadvisor.es/Hotels-g187514-Madrid-Hotels.html";
file_put_contents("hello.html", file_get_contents($url));

file_get_html("Hello_html");