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。发现后更新了答案。
我正在尝试 运行 一个脚本,该脚本将使用查询字符串搜索 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。发现后更新了答案。