可以在某些网站的多个标题标签之间提取文本的PHP脚本?

时间:2014-02-06 23:52:31

标签: php extract

你好,我发现很少,并尝试了一些,但没有什么对我有用。我发现的最好能够提取页面的标题,但页面上有许多标题标签,它只提取第一个。我需要它来提取所有标题。如果它也可以 这是代码:

<?php
$text = file_get_contents("http://www.example.com");
if (preg_match('~<title[^>]*>(.*?)</title>~si', $text, $body)){
echo $body[1];
}

?> 

4 个答案:

答案 0 :(得分:2)

试试这个解决方案

$text = file_get_contents("http://www.example.com");
preg_match_all('/<title>.*?<\/title>/is', $text, $matches);
foreach($matches[0] as $m)
{
    echo htmlentities($m)."<br />";
}

例如:

// input text
$text = <<<EOT
<title>Lorem ipsum dolor</title>
sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua.
Ut enim <title>ad minim</title> veniam,
quis nostrud exercitation ullamco laboris nisi ut
aliquip <title>ex ea</title> commodo consequat.
EOT;

// solution
preg_match_all('/<title>(.+?)<\/title>/is', $text, $matches);
foreach($matches[0] as $m)
{
    echo htmlentities($m)."<br />";
}

输出:

<title>Lorem ipsum dolor</title>
<title>ad minim</title>
<title>ex ea</title>

POST UPDATED(以反映问题中的更改)。

例如,您想要加载一些“a.html”文件:

<html>
<body>
Lorem ipsum dolor
<a title="Ravellavegas.com Analysis" href="http://somewebsite.com/" />
sit amet, consectetur adipisicing elit, sed do eiusmod tempor
<a title="Articlesiteslist.com Analysis" href="http://someanotherwebsite.com/" />
incididunt ut labore et dolore magna aliqua.
</body>
</html>

然后,您必须按如下方式编写脚本:

<?php

$dom = new DOMDocument();
$dom->load('a.html');

foreach ($dom->getElementsByTagName('a') as $tag) {
    echo $tag->getAttribute('title').'<br/>';
}

?>

输出:

Ravellavegas.com Analysis
Articlesiteslist.com Analysis

答案 1 :(得分:0)

使用preg_match_all,它会为您提供一系列匹配项,然后您可以使用每个匹配项。

答案 2 :(得分:0)

如果它是HTML,那么应该只有1个标签......但是,被授予,它可能是带有XSLT的XML。在这种情况下,不是乱用RegExps来尝试解析它,通常最好创建一个DOMDocument对象并使用它:

当然,如果文档不是格式良好的,那么这将会失败。

//taken directly from the comments on PHP documentation at : 
//  http://uk3.php.net/manual/en/domdocument.load.php
//  so that you can load in an XML file over HTTP

$opts = array(
    'http' => array(
        'user_agent' => 'PHP libxml agent',
    )
);

$context = stream_context_create($opts);
libxml_set_streams_context($context);

// request a file through HTTP
$xml = DOMDocument::load('http://www.example.com/file.xml');


// added this bit to get the <title> elements
$aTitles = $xml->getElementsByTagName('title');

//  loop and output
foreach($aTitles as $oTitle) {
  echo "<p>{$oTitle->nodeValue}</p>\n";
}

答案 3 :(得分:0)

对不起,我犯了大错,我不需要标题标签,这是不同的东西。在网站代码中,html的一部分如下所示:

<td><a title="Ravellavegas.com Analysis" href="http://www.statscrop.com/www/ravellavegas.com">

从中我只需要提取webadress,所以从这里只有ravellavegas.com