1

我正在尝试制作一个脚本,每次运行时都会显示一个随机饮料配方。

我发现几个网站都有这个并在页面刷新时显示一个随机配方,但其中一些需要 3-4 秒才能加载,我试图避免这种情况。

所以我找到了这个网站:http ://www.shotdrinks.com/p/recipes/ ...它没有“显示随机食谱”功能。但是,此站点上的每个食谱都有编号,因此可以通过在 url 末尾添加 1 到 11000 之间的任何数字来“调用”它们。外汇。http://www.shotdrinks.com/p/recipes/4000

因此,我每次运行时都使用此代码显示随机配方:

$min=1;
$max=11000;
$number=rand($min,$max);
$link = file_get_html("http://www.shotdrinks.com/p/recipes/$number");

但是,这会显示整个页面,包括菜单等。我只需要标题、玻璃类型、成分和混合方向。这些在不同的 div 中,fx。成分在一个名为“rIngredients”的 div id 中。所以我尝试了这个,以“隔离” div:

$link = file_get_contents("http://www.shotdrinks.com/p/recipes/$number");
$file = strip_tags($link, "<div>");
preg_match_all("#<div class=\"rIngredients\">(?:[^<]*)<\/div>#i", $file, $content);
print_r($content); 

但我不能让它工作,它只是输出一个空数组。

我究竟做错了什么?这是做这种事情的“正确”方式吗?

4

1 回答 1

2

你可以DOMDocument这样使用:

$doc = new DOMDocument;
$doc->loadHTMLFile('http://example.org/path/to/data');

$ingredients = $doc->getElementsByClassName('rIngredients');

echo $doc->saveHTML($ingredients);

->saveHTML()自 5.3.6 以来添加了可选参数;另一种方法是使用->saveXML($ingredients).

于 2013-06-03T07:47:57.833 回答