【问题标题】:Scrape an H1 element on the current page in PHP在 PHP 中的当前页面上抓取 H1 元素
【发布时间】:2015-06-23 12:35:48
【问题描述】:

我目前正在使用 Wordpress。我有一个钩子,它在 <title> 属性填充用户在仪表板中输入的文本之前运行。

现在我想将每个页面的默认标题设置为等于当前页面上的<h1> 属性文本值。我正在使用的钩子的回调函数片段如下所示:

if (!$seoTitle) {
    $seoTitle = '<....>';
}

return $seoTitle;

我希望 seoTitle 在当前页面上默认为 &lt;h1&gt; 元素文本。可行吗?我怎样才能做到这一点?

【问题讨论】:

    标签: php wordpress web-scraping


    【解决方案1】:

    我不完全确定您是如何获得 HTML 的,但您可以使用内置的 DOM 解析器对其进行解析。

    <?php
    
    $html = "<!DOCTYPE html>
    <html>
    <head>
    <title>Page Title</title>
    </head>
    <body>
    
    <h1>This is a Heading one</h1>
    <p>This is a paragraph.</p>
    <h1>This is a Heading two</h1>
    <p>This is a paragraph.</p>
    <h1>This is a Heading three</h1>
    <p><a href='testwww'> This is a paragraph.</a></p>
    
    
    </body>
    </html>";
    
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    
    //If you want to get it from a website you could do the following:
    //$dom->loadHTML(file_get_contents('http://www.w3schools.com/'));
    
    // iterate through the html to get all h1 text
    foreach($dom->getElementsByTagName('h1') as $heading) {
        $h1 = $heading->nodeValue;
        echo $h1 . "<br>";
    }
    
    ?>
    

    【讨论】:

    • 当然,这是要走的路。但是,正如我在其他 cmets 中所指出的,我想在呈现页面后使用 PHP 更改页面的 &lt;title&gt; 属性 - 这是不可能的。谢谢!
    【解决方案2】:

    假设您的 HTML 内容包含在一个变量中并在页面完全加载后执行此操作,请查看以下示例:

    <?php
    $htmlContent = '<html><body><h1>HELLO</h1></body></html>'; // change this to what you need
    $seoTitle = preg_replace('/(.*)<h1>([^>]*)<\/h1>(.*)/is', '$2', $htmlContent);
    echo $seoTitle; // will output: HELLO
    ?>
    

    【讨论】:

      【解决方案3】:
      echo "<h1>".(string)$seoTitle."</h1>";
      

      应该可以。您也可以跳出 php ?&gt;,然后键入常规 html,然后在您想回显变量时跳入。

      【讨论】:

      • 我需要从 DOM 中删除当前页面中的 h1 元素。然后将此值分配给$seoTitle,而不是反过来。
      • 你想从 DOM 获得它?例如,您可以使用:simplehtmldom.sourceforge.net,但除此之外,您还不清楚您想用这个实现什么。听起来像是在渲染 DOM 之前你想做的事情。
      • @tvgemert,实际上,我错了。我真的需要在加载 DOM 之前获取H1,所以从 DOM 中抓取它是没有意义的。我可能应该查询数据库或从其他来源获取值,例如查询变量是否包含我要查找的内容。
      猜你喜欢
      • 2022-01-21
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 2018-01-27
      相关资源
      最近更新 更多