亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過html內容獲取href和文本內容

如何通過html內容獲取href和文本內容

PHP
一只甜甜圈 2023-08-06 15:55:17
我想要獲取內容和網址,包括所有其他 td 數據。我的代碼:$context = stream_context_create(    array(        "http" => array(            "header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"        )    ));$htmlContent = file_get_contents("https://www.iana.org/domains/root/db", false, $context);    $DOM = new DOMDocument();$DOM->loadHTML($htmlContent);$FirstdTable = $DOM->getElementsByTagName('table')->item(0);$Header = $FirstdTable->getElementsByTagName('th');$Detail = $FirstdTable->getElementsByTagName('td');//#Get header name of the tableforeach($Header as $NodeHeader) {    $aDataTableHeaderHTML[] = trim($NodeHeader->textContent);}//#Get row data/detail table without header name as key$i = 0;$j = 0;foreach($Detail as $sNodeDetail){       $aDataTableDetailHTML[$j][] = trim($sNodeDetail->textContent);    $i = $i + 1;    $j = $i % count($aDataTableHeaderHTML) == 0 ? $j + 1 : $j;}電流輸出:Array(    [0] => Array        (            [0] => .aaa            [1] => generic            [2] => American Automobile Association, Inc.        )    [1] => Array        (            [0] => .aarp            [1] => generic            [2] => AARP        )    [2] => Array        (            [0] => .abarth            [1] => generic            [2] => Fiat Chrysler Automobiles N.V.        )}我在這里想要:Array(    [0] => Array        (            [0] => .aaa            [1] => generic            [2] => American Automobile Association, Inc.            [3] => https://www.iana.org/domains/root/db/aaa.html        )    [1] => Array        (            [0] => .aarp            [1] => generic            [2] => AARP            [3] => https://www.iana.org/domains/root/db/aarp.html        )    [2] => Array        (            [0] => .abarth            [1] => generic            [2] => Fiat Chrysler Automobiles N.V.            [3] => https://www.iana.org/domains/root/db/abarth.html        )}
查看完整描述

1 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

目前,您只是獲取 all 中的所有文本內容<td>。并且它不會將鏈接包含在錨標記內。為此,您需要更深入地研究<td>.


這是使用以下方法來完成此操作的一種方法xpath:


$xpath = new DOMXpath($DOM);

$base = 'https://www.iana.org/';

foreach($Detail as $sNodeDetail)

{

    $aDataTableDetailHTML[$j][] = trim($sNodeDetail->textContent);

    if ($link = $xpath->evaluate("string(./span[contains(@class, 'domain')]/a/@href)", $sNodeDetail)) {

        $aDataTableDetailHTML[$j][] = "{$base}{$link}";

    }

    $i = $i + 1;

    $j = $i % count($aDataTableHeaderHTML) == 0 ? $j + 1 : $j;

}

基本上,查詢只是提取href當前<td>迭代中的值<span class="domain tld"><a href="xxxx">xxx</a></span>并獲取該href值。


另一種方法是迭代每個<tr>而不是每個<td>:


$aDataTableDetailHTML = [];

$DOM = new DOMDocument();

$DOM->loadHTML($htmlContent);

$xpath = new DOMXpath($DOM);

$base = 'https://www.iana.org/';

foreach($xpath->query('//table[@id="tld-table"]/tbody/tr') as $row) {

    $domain = trim($xpath->evaluate("string(./td[1])", $row));

    $type = $xpath->evaluate("string(./td[2])", $row);

    $tld_manager = $xpath->evaluate("string(./td[3])", $row);

    $url = $xpath->evaluate("string(./td[1]/span/a/@href)", $row);

    $aDataTableDetailHTML[] = [$domain, $type, $tld_manager, "{$base}{$url}"];

}


查看完整回答
反對 回復 2023-08-06
  • 1 回答
  • 0 關注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號