0

我已经安装了一个 JSON 插件并获得了 HTML 页面的内容。现在我想解析并找到一个特定的表,它只有类,但没有 id。我使用 PHP 类 DOMDocument 对其进行解析。我的想法是访问表格之前的标签,然后以某种方式使用 DOMDocument 访问下一个以下标签(我的表格)。例子:

<a name="Telefonliste" id="Telefonliste"></a>
<table class="wikitable">

所以,我得到了拳头,<a>然后我得到了<table>

我已经使用以下命令获得了所有表格,尤其是getElementsByTagName(). 之后,我可以访问我的表所在的 item(2):

        $dom = new DOMDocument();

//load html source
$html = $dom->loadHTML($myHtml);

//discard white space
$dom->preserveWhiteSpace = false;

//the table by its tag name
$table = $dom->getElementsByTagName('table');
        $rows = $table->item(2)->getElementsByTagName('tr');

这种方式没问题,但我想让它更通用,因为现在我知道该表位于 item(2) 中,但是可以更改位置,例如,如果一个新表包含在我的表之前的 HTML 页面中。我的表不会在 item(2) 中,而是在 item(3) 中。所以,我希望它以一种我仍然可以到达该表的方式进行解析,而无需更改我的代码中的某些内容。我可以使用 DOMDocument 作为 DOM 解析器吗?

4

2 回答 2

0

您可以使用 DOMXPath,并根据需要使表达式具有通用性。

例如:

$dom = new DOMDocument();

//discard white space
$dom->preserveWhiteSpace = false;

//load html source
$dom->loadHTML($myHtml);

$domxpath = new DOMXPath($dom);
$table = $domxpath->query('//table[@class="wikitable" and not(@id)][0]')->item(0);
$elementBeforeTable = $table->previousSibling;
$rows = $table->getElementsByTagName('tr');
于 2013-08-14T17:11:02.430 回答
0

I've started writing a simple extension of this for the purpose of web scraping. I'm not 100% on the direction I want to take with it yet, but you can see an example of how to get the original HTML back in the response of the search rather than just raw text.

https://github.com/WolfeDev/PageScraper

EDIT: I plan on implementing basic table parsing soon.

于 2013-08-14T17:16:08.043 回答