获取特定 class 和 file_get_contents 链接的所有锚文本

Get all anchor texts of links in specific class with file_get_contents

我正在尝试检索此链接的锚文本:

<a class="c-shadow" href="some-random-link">text 1</a>
<a class="c-shadow" href="some-random-link">text 2</a>
<a class="c-shadow" href="some-random-link">text 3</a>
<a class="c-shadow" href="some-random-link">text 4</a>
<a class="c-shadow" href="some-random-link">text 5</a>

考虑到所有这些链接都具有相同的 class 名称 ( c-shadow ),我该如何检索所有锚文本?我需要找到文本 1、文本 2、文本 3、文本 4、文本 5...

您可以使用 DOMDocument 和 XPath 解析 html。 XPath 中的选择器语法非常简单——a 标记后跟 [@class='target_class_name']。 foreach 循环将遍历符合条件的节点,然后只需在迭代时提取节点值即可。

代码:(Demo)

$html = <<<HTML
<a class="c-shadow" href="some-random-link">text 1</a>
<a class="c-shadow" href="some-random-link">text 2</a>
<a class="c-shadow" href="some-random-link">text 3</a>
<a class="c-shadow" href="some-random-link">text 4</a>
<a class="c-shadow" href="some-random-link">text 5</a>
HTML;

$dom = new DOMDocument; 
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->evaluate("//a[@class='c-shadow']") as $node) {
  $result[] = $node->nodeValue;
}
var_export($result);

输出:

array (
  0 => 'text 1',
  1 => 'text 2',
  2 => 'text 3',
  3 => 'text 4',
  4 => 'text 5',
)

或者,textNode 也可以被隔离。

foreach ($xpath->query("//a[@class='c-shadow']/text()") as $textNode) {
    $result[] = $textNode->nodeValue;
}