2011-06-10 84 views
-2

我有一个大问题。我想用php解析一个网页。 我不明白为什么它不起作用。我想从该页面获取“tr”标签,然后,我将通过“td”标签解析以前获取的每个文本。问题是我无法解析文本,因此两个标签之间可能会有另外两个标签。网页刮伤问题

是否有任何关于我应该知道的技巧?因为我正在尝试超过2天,我仍然无法获得结果。

这是网页:

http://www.tjareborg.fi/akkilahdot?DepartureIds=-1&CtryId=-1&DestinationAirportIds=-1&ResId=-1&QueryDurID=a&QueryDepDate=10.6.2011&LmsTypeId=2%2c3%2c1&PaxPrice=2167&SortAscending=True&page=0 

所有我想要做的是分析该表,并获得每一个单元格的内容。

非常感谢你!

+0

*(相关)* [最佳方法来解析HTML](HTTP:// stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon 2011-06-10 09:46:39

+1

你可能想指出你已经尝试过并向我们展示一些东西码。 StackOverflow有很多例子来解析HTML,现在你的问题就像gimme-teh-codez一样。 – Gordon 2011-06-10 09:54:56

+0

*(相关)* [稳健和成熟的HTML解析器的PHP](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php) – Gordon 2011-06-10 09:57:42

回答

1
+0

除了难以回答,因为它不显示OP如何实现他的目标,SimpleHTMLDom对解析器来说是一个糟糕的选择。这很慢,有一个糟糕的代码库,并不基于libxml。查看我的链接下面的问题更好的替代SimpleHtmlDom。 – Gordon 2011-06-10 09:48:04

+0

这很酷的事情。非常感谢! – Gigg 2011-06-10 10:03:18

2

尝试:

libxml_use_internal_errors(true); 

$url = '%your url%'; 
$dom = new DOMDocument; 
$dom->loadHTML(file_get_contents($url)); 

libxml_clear_errors(); 

$xpath = new DOMXPath($dom); 
$rows = array(); 
foreach ($xpath->query('//*[@id="tblLmsList"]//tr') as $tr) { 
    $cells = array(); 
    foreach ($xpath->query('td', $tr) as $td) { 
     $cells[] = trim($td->nodeValue); 
    } 

    if (sizeof($cells) > 0) { 
     $rows[] = $cells; 
    } 
} 

print_r($rows); 

输出

Array 
(
    [0] => Array 
     (
      [0] => la 11.6. 
      [1] => Varna 
       Bulgaria 
      [2] => Helsinki 
      [3] => Matkajokeri 
      [4] => 175,- 
      [5] => 
      [6] => - 
      [7] => 
      [8] => - 
      [9] => 
     ) 

    [1] => Array 
     (
      [0] => la 11.6. 
      [1] => Varna 
       Bulgaria 
      [2] => Helsinki 
      [3] => Pelkät lennot 
      [4] => 150,- 
      [5] => 
      [6] => - 
      [7] => 
      [8] => - 
      [9] => 
     ) 

... 
+0

不使用错误抑制。使用['libxml_use_internal_errors'](http://nl2.php.net/manual/en/function.libxml-use-internal-errors.php)和['libxml_clear_errors'](http://nl2.php.net/ manual/en/function.libxml-clear-errors.php) – Gordon 2011-06-10 09:52:38

+1

@Gordon改变它,谢谢你的提示! :) – Yoshi 2011-06-10 09:55:21

+0

这工作!非常感谢。你救了我!我将开始更多地了解DOMDocument的。它似乎在这种情况下起作用。 – Gigg 2011-06-10 10:04:34