簡體   English   中英

在PHP中,如何為某個文本模式刮取DOMDocument,然后獲取該匹配文本的文本節點的父元素?

[英]In PHP, how do you scrape a DOMDocument for a certain text pattern, then get the parent element of that matching text's text node?

我已經使用PHP和cURL構建了一個簡單的Web抓取工具,並且一直使用這樣的代碼來抓取ID的抓取頁面的某些元素,或者使用Tag Name,在所需的元素上沒有ID:

$dom = new DOMDocument();
@$dom->loadHTML($response);
$table = $dom->getElementsByTagName('table')->item(4);
$response = $dom->saveXML($table);

現在我遇到了一個兩難的境地,我需要更進一步找到某個字符串或正則表達式文本模式的父元素,因為我需要從中收集數據的網站沒有任何ID或類我需要從中提取數據的HTML元素,並且各種頁面可能以不同的方式組織數據,因此我不能總是依賴表#X中的數據。 獲取我在此站點之后的數據的唯一確定方法是通過其文本格式查找它,該文本格式始終是以“1”開頭的數字列表。它們不使用有序列表,或者它會簡單得多。 它只是一個簡單的表格單元格,數字行由簡單的<br>分隔。

所以我在想,如果我能找到“1”,那么它的父元素就是表格單元格<td> ,在找到之后,我需要提取其內容,也許還需要提取任何其他相鄰表格單元格的內容在那個表行。 我在頁面或HTML代碼中找不到“1.”的其他實例,所以這種方法似乎是合理的,如果不是有點hacky,但我離題了。

那么,接近這樣的事情的最佳方法是什么?

您總是可以嘗試像下面這樣的XPath查詢(假設您所關注的內容始終位於表格單元格中)

$xpath = new DOMXPath($dom);
$cells = $xpath->query('//table/tr/td[contains(.,"1. ")]');
if ($cells->length > 0) {
    // get first item
    $cell = $cells->item(0);
    echo $cell->nodeValue; // text content only
    echo $dom->saveXML($cell); // <td>1. ... </td>
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM