【问题标题】:Scraping div data technique using a regex in PHP在 PHP 中使用正则表达式抓取 div 数据技术
【发布时间】:2011-11-11 19:18:09
【问题描述】:

我希望使用 curl 从远程服务器上抓取带有 div id 的 div 数据。实际上这是正则表达式的问题,我在变量中包含页面的内容,例如:

$url = "http://www.google.co.in/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);

获取数据数据的正则表达式的正确语法是什么,格式如下:

$content = "<div id="cat_list">
<h4>Browse by Category</h4>
<ul>
<li class="a"><a href="link1.php">category1</a></li>
<li class="b"><a href="link2.php">category2</a></li>
</ul>
</div>";

我需要这里的所有类别名称。

【问题讨论】:

标签: php regex curl


【解决方案1】:

如果您想使用它而不是解析器,这里有一个正则表达式,因为它可能更快并且使用更少的开销。

$content = <<<EOD
<div id="cat_list">
<h4>Browse by Category</h4>
<ul>
<li class="a"><a href="link1.php">category1</a></li>
<li class="b"><a href="link2.php">category2</a></li>
</ul>
</div>
EOD;

$categories = array();

if (preg_match('/<div id="cat_list">(.*?)<\/div>/is', $content, $cat_list)) {
    $matches = preg_match_all('/<li[^>]*><a href="([^"]+)">([^<]+)<\/a>/i', $cat_list[1], $cats);

    for ($i = 0; $i < $matches; ++$i) {
        $categories[$cats[2][$i]] = array('href' => $cats[1][$i], 'name' => $cats[2][$i]);
    }
}

var_dump($categories);

结果:

array(2) {
  ["category1"]=>
  array(2) {
    ["href"]=>
    string(9) "link1.php"
    ["name"]=>
    string(9) "category1"
  }
  ["category2"]=>
  array(2) {
    ["href"]=>
    string(9) "link2.php"
    ["name"]=>
    string(9) "category2"
  }
}

【讨论】:

  • 嘿,非常感谢您的帮助。另一件事,如果我有一个包含 4 ul 的 div,其中两个有一些类,而另外两个没有,所以如果我想选择这 4 个 ul 之间的所有 li 然后应该怎么做?我试过了
  • if (preg_match('/
    (.*?)/is', $content, $cat_list)) {
  • $matches = preg_match('/
      (.*?)/is', $cat_list[1], $content2);
  • } 对不起,我需要用格式化的文本写,这就是为什么我这样做的原因..它只向我显示第一个 ul 的数据就是这样..请告诉我如何才能拥有所有 li那些 ul... 再次感谢您的帮助... :)
猜你喜欢
相关资源
最近更新 更多
热门标签