将Xpath应用于PHP :: Libxml - 如何做到这一点?

时间:2011-05-29 12:55:31

标签: php mysql parsing dom xpath

我想用PHP DOM-Document方式解析一个站点:注意它更快更容易使用。有些人说服了我!!一个问题 - 因为我是一个php-newbie ;-)我可以应用XPaths代码

示例:http://buergerstiftungen.de/cps/rde/xchg/SID-F8780E81-ABF20567/buergerstiftungen/hs.xsl/db.htm

目标:获取结果(大约213个不同的记录)并解析它们以获得在本地MySQL-Db上保存的数据库转储!?

顺便说一句:看两个结果页:

http://buergerstiftungen.de/cps/rde/xchg/SID-F8780E81-ABF20567/buergerstiftungen/hs.xsl/db_20302.htm http://buergerstiftungen.de/cps/rde/xchg/SID-F8780E81-ABF20567/buergerstiftungen/hs.xsl/db_20289.htm

您看到存储了大量信息......

好吧,我曾尝试用Perl写一个刮刀 - 但我没有运气。 Perl对于新手非常非常努力。之后我厌倦了用PHP编写解析器 - 它更容易一些。但该网站(参见详细结果页面)有点复杂。如何解析它们 - 以获取基于本地的MySQL数据库的数据集。然后我有更多的机会进行检索。 我想让数据在MySQL数据库中将它们本地化(在我的OpenSuse Linux系统版本11.3上)。

好吧:我有三个部分:

  1. 解析
  2. 存储(在MySQL中:即创建MySQL转储)
  3. 由于我对XPath的经验很少,我在Mozilla-Browser中有一个Xpather-Tool。但我不确定应该如何应用它们 - 请参阅我收集的数据 - 下面: 也许你们中的一些人可以在这里帮助我 - 并告诉我如何在parsercode中应用它们:

    我很乐意听取您的意见

    在这里看到一些细节: 结果(来自大约213个不同的记录) - 见两个结果页: - 收集了一些Xpath数据:

    示例:BürgerstiftungWiesloch http://buergerstiftungen.de/cps/rde/xchg/SID-A7DCD0D1-702CE0FA/buergerstiftungen/hs.xsl/db_20289.htm

    / HTML /体/格[@ ID = '主'] /格[@ ID = '包装'] /格[@ ID = '内'] /格[@ ID = 'marginalblock'] /格[ 1 /ρ

    1。 Gründungsgeschichte / HTML /体/格[@ ID = '主'] /格[@ ID = '包装'] /格[@ ID = '内'] /格[@ ID = '内文'] / DIV / P [1 ] /强

    2。 Kurzvorstellung / Ziele / HTML /体/格[@ ID = '主'] /格[@ ID = '包装'] /格[@ ID = '内'] /格[@ ID = '内文'] / DIV / P [2 ] /跨度[2] /跨度/ b

    第3。 Projekte / HTML /体/格[@ ID = '主'] /格[@ ID = '包装'] /格[@ ID = '内'] /格[@ ID = '内文'] / DIV / P [3 ] /跨度〔2〕/跨度/强

    KONTAKT: / HTML /体/格[@ ID = '主'] /格[@ ID = '包装'] /格[@ ID = '内'] /格[@ ID = 'marginalblock'] / DIV [1] / H6

    问题:如何在Libxml中应用获得的数据 - 以使PARSER-Part启动并运行!?我是XPath的首发!

    期待收到你的来信! 零

    PS - 如果我必须添加更多信息 - 或者如果我必须更加正确地问 - 请告诉我!很抱歉成为新手!; - )

    PPS - 并且更新:我有Mysql部分:它看起来像这样:

    CREATE TABLE IF NOT EXISTS `address` (
    `id` int(4) NOT NULL auto_increment,
    `name` varchar(30) default NULL,
    `contact-details` varchar(30) default NULL,
    `street` varchar(30) default NULL,
    `postal-code` varchar(30) default NULL,
    `town` varchar(30) default NULL,
    `phone` varchar(30) default NULL,
    `email` varchar(30) default NULL,
    `homepage` varchar(30) default NULL,
    `summary` varchar(30) default NULL,
    `projects` varchar(30) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
    

    这样的东西符合需要..

    更新; 很多感谢Lenzai的快速回答:

    你建议尝试这样的事情:

    $url="http://...";
    $xpath_query="/html/body/...";
    
    /html/body/div[@id='main']/div[@id='wrapper']/div[@id='inner']/div[@id='marginalblock']/div[1]/p
    /html/body/div[@id='main']/div[@id='wrapper']/div[@id='inner']/div[@id='contentblock']/div/p[1]/strong
    /html/body/div[@id='main']/div[@id='wrapper']/div[@id='inner']/div[@id='contentblock']/div/p[2]/span[2]/span/b
    /html/body/div[@id='main']/div[@id='wrapper']/div[@id='inner']/div[@id='contentblock']/div/p[3]/span[2]/span/strong
    /html/body/div[@id='main']/div[@id='wrapper']/div[@id='inner']/div[@id='marginalblock']/div[1]/h6
    
    $ch=curl_init($url);
    $res=curl_exec($ch);
    $dom = new DOMDocument()
    $dom->loadHTML($res);
    $xpath=new DomXPath($dom);
    $node= $xpath->query($xpath_query)->item(0);
    echo $node->nodeValue;
    

    我在这里启用了Curl。那没问题。我应该输入Xpaths

    在这一行:$ xpath_query =“/ html / body / ...”;

    问题:我应该输入上面提到的所有X路径。从1到3 ......依此类推这最终如何看待你能帮助吗?我在这里 - 我是非常非常新的PHP?

    期待收到你的来信!!非常感谢所有人和任何帮助!

1 个答案:

答案 0 :(得分:1)

尝试这样的事情

$url="http://...";
$xpath_query="/html/body/...";
$ch=curl_init($url);
$res=curl_exec($ch);
$dom = new DOMDocument()
$dom->loadHTML($res);
$xpath=new DomXPath($dom);
$node= $xpath->query($xpath_query)->item(0);
echo $node->nodeValue;

你只需要在你的php.ini中启用curl