PHP 无法获得健康热线搜索结果

Unable to get Healthline search results with PHP

我正在尝试 运行 一个脚本,该脚本将使用查询字符串搜索 Healthline 并确定是否有任何搜索结果,但我无法通过发布到页面的查询字符串获取内容。要在他们的网站上搜索内容,请转到 https://www.healthline.com/search?q1=search+string

这是我尝试过的:

        $healthline_url = 'https://www.healthline.com/search';
        $search_string = 'ashwaganda';
        
        $postdata = http_build_query(
            array(
                'q1' => $search_string
            )
        );
        $opts = array('http' =>
            array(
                'method' => 'POST',
                'header' => 'Content-type: application/x-www-form-urlencoded',
                'content' => $postdata
            )
        );
        $stream = stream_context_create($opts);

        $theHtmlToParse = file_get_contents($healthline_url, false, $stream);

        print_r($theHtmlToParse);

我还尝试将查询字符串添加到 url 并跳过流,以及其他变体,但我 运行 没有想法。这也不起作用:

        $healthline_url = 'https://www.healthline.com/search';
        $search_string = 'ashwaganda';
        
        $opts = array(
            'http'=>array(
                'method'=>"GET",
                'header'=>"Content-Type: text/xml; charset=utf-8"
            )
        );
        $stream = stream_context_create($opts);

        $theHtmlToParse = file_get_contents($healthline_url.'&q1='.$search_string, false, $stream);

        print_r($theHtmlToParse);

和建议?

编辑:我更改了 url 以防有人想查看搜索页面。还修复了查询字符串。还是不行。

为了回应 Ken Lee,我确实尝试了以下 cURL 脚本,它也只是 returns 没有搜索结果的页面:

    $healthline_url = 'https://www.healthline.com/search?q1=ashwaganda';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $healthline_url);
    $data = curl_exec($ch);
    curl_close($ch);

    print_r($data);

Healthline 不直接加载搜索结果。它的搜索索引存储在 Algolia 中,并进行了额外的 javascript 调用以检索结果。因此您无法看到 file_get_content.

的搜索结果

要查看搜索结果,您需要 运行 一个浏览器模拟器来模拟 javascript 支持的浏览器以正确 运行 网站页面。

对于 PHP 开发人员,您可以尝试使用 php-webdriver 通过 webdriver 控制浏览器(例如 Selenium,Chrome + chromedriver,Firefox + geckodriver)。

更新:不知道目标站点是Healthline。发现后更新了答案。