来自网站的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>我的代码
$dom = new simple_html_dom();
$dom->load_file( "blah.html" );
$div_category = $dom->find("#blahlist");
foreach ($div_category as &$ul){
$a_list = $ul->find("a");
foreach ( $a_list as &$anchor){
$csv_array=array($anchor->plaintext, $anchor->getAttribute("href") );
fputcsv($csv_out, $csv_array);
print_r($anchor);
}问题是它只显示第一行(第一行),而不显示blahlist中列表的其余部分。我做错了什么吗?与可能在第一行之后停止的<li>有关吗?
发布于 2011-11-15 17:48:49
怎么样
$dom->find("#blahlist li");它是“抓取”#blahlist下的所有li。
发布于 2011-11-15 19:11:10
使用正则表达式抓取:
$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>";
}
}您只需在以下行编辑ul列表的id:
$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]https://stackoverflow.com/questions/8134300
复制相似问题