【发布时间】:2018-10-22 08:40:44
【问题描述】:
试图抓取网址。但是我的foreach 循环只返回前两个<div> 元素的URL。它不会更进一步。
功能:
function getSiteContent($url)
{
$html = cache()->rememberForever($url, function () use ($url) {
return file_get_contents($url);
});
$parser = new \DOMDocument();
$parser->loadHTML($html);
return $parser;
}
代码:
libxml_use_internal_errors(true);
$url = 'http://www.sumitomo-rd-mansion.jp/kansai/';
$parser = getSiteContent($url);
$allDivs = $parser->getElementsByTagName('div');
foreach ($allDivs as $div) {
if ($div->getAttribute('id') == 'areaWrap') {
$innerDivs = $div->getElementsByTagName('div');
foreach ($innerDivs as $innerDiv) {
if ($innerDiv->getAttribute('class') == 'areaBox clearfix') {
$links = $innerDiv->getElementsByTagName('a');
if ($links->length > 0) {
$a = $links->item(0);
$linkRef = $a->getAttribute('href');
$link [] = $linkRef;
}
}
}
}
}
var_dump($link);
结果:
array(2) {
[0]=>
string(65) "http://www.sumitomo-rd-mansion.jp/kansai/higashi_umeda/index.html"
[1]=>
string(60) "http://www.sumitomo-rd-mansion.jp/kansai/osaka745/index.html"
}
使用这段代码,我得到了第一个和第二个 div areaBox。并停在那里。我的 foreach 循环错了吗?或者是网站有一些障碍是
停止刮擦?谢谢你帮助我。
【问题讨论】:
-
你试过清除缓存吗?也许您的缓存中有旧版本的网站。
-
@Remul 是的,实际上我没有尝试任何效果......仍然只有两个没有更多......
-
你试过
simple_html_dom因为它可以解析它们吗? -
不,我没有,我认为 DOMdocument 比那更好。最后,我也不知道怎么用 :)
标签: php web-scraping domdocument