我正在尝试制作一个每次运行时都会显示随机饮料配方的脚本。
我找到了几个拥有此功能的网站,并在刷新页面时显示随机配方,但其中一些需要3-4秒才能加载,我正在努力避免这种情况。
所以我找到了这个网站:http://www.shotdrinks.com/p/recipes/ ...没有“显示随机食谱”特征。但是,此站点上的每个配方都已编号,因此可以通过在URL末尾添加1到11000之间的任意数字来“调用”它们。 FX。 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:
$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);
但是我不能让它工作,只是输出一个空数组。
我做错了什么?这是做这样的事情的“正确”方式吗?
答案 0 :(得分:2)
您可以这样使用DOMDocument
:
$doc = new DOMDocument;
$doc->loadHTMLFile('http://example.org/path/to/data');
$ingredients = $doc->getElementsByClassName('rIngredients');
echo $doc->saveHTML($ingredients);
自5.3.6以来,->saveHTML()
的可选参数已添加;另一种方法是使用->saveXML($ingredients)
。