我有一个问题 - 一个不解析的解析器。这是行不通的!它没有给任何东西!好吧,我想要回来 - 并将结果存储在mysql数据库中。
<?PHP
// Original PHP code by Chirp Internet: http://www.chirp.com.au
// Please acknowledge use of this code by including this header.
$url = "http://www.edi.admin.ch/esv/00475/00698/index.html?lang=de";
//$input = @file_get_contents($url) or die("Could not access file: $url");
$input = file_get_contents($url) or die("Could not access file: $url");
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER))
{
foreach($matches as $match)
{
// $match[2] = all the data i want to collect...
// $match[3] = text that i need to collect - see a detail-page
}
}
?>
它有点过头了:它没有回馈任何结果。我是否必须将file_get_contents()
与查询字符串一起使用?
答案 0 :(得分:4)
在这里工作正常:
$url = "http://www.edi.admin.ch/esv/00475/00698/index.html?lang=de";
$doc = new DOMDocument();
// Supress warnings for screwy HTML
@$doc->loadHTMLFile($url);
// Use DOM functionality to get all links
$link_list = $doc->getElementsByTagName('a');
$links = array();
foreach($link_list as $link) {
if($link->getAttribute('href')) {
// and put their href attributes and
// text content in an array
$link_info['href'] = $link->getAttribute('href');
$link_info['text'] = $link->nodeValue;
$links[] = $link_info;
}
}
print_r($links);
输出:
Array
(
[0] => Array
(
[href] => #webNavigationDiv
[text] => Direkt zur Navigation [Alt + 1]
)
[1] => Array
(
[href] => #contentStart
[text] => Direkt zum Inhalt [Alt + 2]
)
[2] => Array
(
[href] => #keywords_fast
[text] => Direkt zur Suche [Alt + 5]
)
答案 1 :(得分:3)
你正在做一些你不应该做的事情 - 用正则表达式解析HTML。不要这样做!
使用DOM解析函数。 PHP的DOMDocument类非常易于使用,并且比正则表达式更易读(和稳定):
$dom = new DOMDocument;
$dom->loadHTML($yourHTML);
$links = $dom->getElementsByTagName('a');
$hrefs = array();
foreach ($links as $link) {
$hrefs[] = $link->getAttribute('href');
}
如果您想这样做,获取其他数据(例如文本内容或其他属性名称)非常简单。
答案 2 :(得分:2)
如果启用了适当的fopen包装,则只能使用类似fopen的函数。
请参阅:http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen
虽然我会说“正则表达式对html不好”,如果这只是一个小脚本,谁在乎呢?话虽这么说,DOMDocument和朋友很容易使用。
约什