php如何刮内部<;李>&书信电报;a>;使用simplehtmldom?
来自网站的HTMLphp如何刮内部<;李>&书信电报;a>;使用simplehtmldom?,php,list,loops,foreach,scrape,Php,List,Loops,Foreach,Scrape,来自网站的HTML <ul id="blahlist"> <li><a href="http://blahblah.com">blah blah</a></li> <li><a href="http://blahblah2.com">blah blah 2</a></li> ...... </ul> 问题是它只显示第一行(第一行),而不
<ul id="blahlist">
<li><a href="http://blahblah.com">blah blah</a></li>
<li><a href="http://blahblah2.com">blah blah 2</a></li>
......
</ul>
问题是它只显示第一行(第一行),而不显示blahlist中列表的其余部分。我做错什么了吗?与第一行之后可能停止的
有关吗?如何
$dom->find("#blahlist li");
使用正则表达式“抓取”所有
li
s下的#blahlist
刮取:
$html = <<<EOF
<ul id="blahlist">
<li><a href="http://blahblah.com">blah blah</a></li>
<li><a href="http://blahblah2.com">blah blah 2</a></li>
<li><a href="http://blahblah2.com">blah blah 3</a></li>
<li><a href="http://blahblah2.com">blah blah 4</a></li>
</ul>
EOF;
$ul_id = "blahlist";
if (preg_match("#<ul[^<>]+id=[\"']?{$ul_id}[\"']?[^<>]*>([\s\S]+?)</ul>#i", $html, $match))
{
$lis = $match[1];
preg_match_all("#<li[^<>]*>\s*<a[^<>]+href=[\"']?([^<>\"']+)[\"']?[^<>]*>([\s\S]+?)</a>#i", $lis, $matches);
foreach ($matches[1] as $k => $href) {
$href = strip_tags($href);
$text = strip_tags($matches[2][$k]);
print "$text [$href]<br>";
}
}
结果:
blah blah [http://blahblah.com]
blah blah 2 [http://blahblah2.com]
blah blah 3 [http://blahblah2.com]
blah blah 4 [http://blahblah2.com]
我想你应该再详细说明一下,不是每个人都知道,
DOM
@Moe Sweet我刚试过,结果还是一样的。你能解释一下你的意思吗?我不知道我能为那些了解DOM的人说些什么?@事实上,这不是DOM,而是SimpleHTMLDom。SimpleHTMLDom与DOM无关。DOM是一个与W3C语言无关的接口,SimpleHTMLDom没有实现它。@事实是的,我假设是这样,但它不是OP使用的。PHP的DOM扩展是W3C接口的实现。它没有find方法,也不支持CSS选择器查询。这就是为什么我说他应该详细说明的原因,我是那些会犯错误的人之一:PSuggested第三方替代品,而不是字符串解析:,谢谢你的回答,但我更喜欢加载simpleHTMLDom而不是正则表达式。原因是因为我的下一个函数将从读取我发布的这个函数创建的csv中获取url内的所有内容。如果有办法的话,我可能会更习惯于使用Dom而不是正则表达式。
$ul_id = "blahlist";
blah blah [http://blahblah.com]
blah blah 2 [http://blahblah2.com]
blah blah 3 [http://blahblah2.com]
blah blah 4 [http://blahblah2.com]