我正在构建一个PHP搜索引擎。
我想要不同的搜索类型。
就像用户可以搜索图像,网站,视频等一样。
现在我正在尝试2件事:
1:仅搜索视频。
2:并且仅搜索图像。
我正在使用Bing在网络上爬行。像这样:
$bing = 'https://www.bing.com/images/search?q='. rawurlencode($keyword);
我正在使用简单HTML Dom解析器来获取所有结果。
从浏览器的Inspect Element控制台中,我知道Bing中图像的整个“路径”是这样的:
$img = $html->find('div[data-bm] div[class=dg_b] div[class=dgControl]ul[class=dgControl_list] li div[class=varh] div[class=imgpt] a[class=iusc] div[class=hoff] img[class=mimg]');
但是,如果我这样做:
if($img) {
// rest of the code ...
}
else {
echo 'false';
}
我弄错了,因为我插入的搜索路径不正确。
但是我可以肯定地知道。
与视频搜索完全相同的问题。
我搜索了整个互联网,但没有找到任何解决方案。
有人知道解决方案吗?
编辑
我忘记提及以下内容:
如果我仅将图像作为查找路径,例如:$img = $html->find('img');
,则可以得到结果。
但是问题是,如果我这样做,我得到的结果根本不重要。
就像我搜索特朗普一样,我得到一张海滩的照片和一些西红柿的照片,我认为这完全是荒谬的。
编辑2
我发现$ html-> load_file()不起作用。
我通过运行以下命令进行了测试:
if(!$html->load_file($bing)) {
echo 'load file doesn't work....';
}
可能是因为我有多次$ html = ... 像这样:
if($_GET['type'] == 'default') { // rest of the code }
else if($_GET['type'] == 'vids') { // rest of the code }
else if($_GET['type'] == 'images') { // rest of the code }
else if($_GET['type'] == 'news') { // rest of the code }
在其他if语句中,它以$html = simple_html_dom();
开头
但这也以$html->clear(); unset($html);
结尾
但是,如果我测试$html->clear(); unset($html);
是否像这样工作:
if($html->clear()) {
unset($html);
echo 'clear worked!';
}
else {
echo 'clear didn't work :(';
}
我明白了:清除无效:(
因此,这意味着$html->load_file();
和$html->clear();
答案 0 :(得分:0)
我发现使用DOMDocument和XPath容易得多,因此这说明了我如何管理上述内容。
我倾向于的方法是用PHP加载页面,然后将其保存到文件中,然后将该文件用作路径,因为有时这与浏览器路径不同。使用此保存的文件,我将转到以下XPath。
使用的XPath是//span[@id="main"]//a[@class="thumb"]//img/@src
,它应该很容易遵循(具有id属性为main的span标签,然后是一个具有thumb类的标签,并在其中查找图像标签,最后返回src属性)...
$content = file_get_contents("https://www.bing.com/images/search?q=cat");
file_put_contents("b.html", $content);
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($content);
$xp = new DOMXPath($dom);
$images = $xp->query('//span[@id="main"]//a[@class="thumb"]//img/@src');
foreach ( $images as $image ) {
echo $image->nodeValue.PHP_EOL;
}