-2

可能重复:
如何使用 PHP 解析和处理 HTML?

我已使用此代码从给定的 url 网站获取 html 内容。

**Code:**

=================================================================

example URL: http://www.qatarsale.com/EnMain.aspx

/*

$regexp = '/<div id="UpdatePanel4">(.*?)<\/div>/i';

@preg_match_all($regexp, @file_get_contents('http://www.qatarsale.com/EnMain.aspx'), $matches, PREG_SET_ORDER);*/

/*

但 $matches 返回空白数组。我想获取在 div id="UpdatePanel4" 中找到的所有 html 内容。

如果有人有任何解决方案,请建议我。

谢谢

4

3 回答 3

3

首先,确保服务器允许您获取数据。

其次,使用 html 解析器来解析数据。

$html = @file_get_contents('http://www.qatarsale.com/EnMain.aspx');
if (!$html) {
  die('can not get the content!');
}
$doc = new DOMDocument();
$doc->loadHTML($html);
$content = $doc->getElementById('UpdatePanel4');
于 2012-06-28T07:38:09.983 回答
0

那只是无济于事。即使您设法使 Regexp 正常工作,您使用它的方式也存在两个问题:

  • 如果服务器像这样更改 HTML 的一些小东西<div data-blah="blah" id="UpdatePanel4">怎么办:在这种情况下,您也必须更改您的正则表达式。

  • 第二个问题:我想你想要innerHTMLdiv 的,对吧?在这种情况下,您使用正则表达式处理的方式是不关心嵌套或树结构。您将获得的字符串来自您指定的字符串,直到遇到的第一个字符串。 </div>

解决方案:

使用正则表达式解析 HTML 总是一个坏主意。请改用DOMDocument

于 2012-06-28T07:38:34.773 回答
0
// Gets the webpage
$html = @file_get_contents('http://www.qatarsale.com/EnMain.aspx');

$startingTag = '<div id="UpdatePanel4">';
// Finds the position of the '<div id="UpdatePanel4">
$startPos = strpos($html, $startingTag);
// Get the position of the closing div
$endPos = strpos($html, '</div>', $startPos + strlen($startingTag));
// Get the content between the start and end positions
$contents = substr($html, $startPos + strlen($startingTag), $endPos);

如果 UpdatePanel4 div 包含更多 div,您将需要做更多的工作

于 2012-06-28T07:35:34.197 回答