применение Xpath к PHP :: Libxml - как это сделать? - PullRequest
0 голосов
/ 29 мая 2011

Я хочу проанализировать сайт с помощью PHP DOM-Document: обратите внимание, что это быстрее и проще в использовании.Некоторые из вас убедили меня!Один вопрос - так как я новичок в php ;-), могу ли я применить 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.Тогда у меня больше возможностей для поиска.Я хочу, чтобы данные были локальными (в моей системе OpenSuse Linux версии 11.3) в базе данных MySQL.

хорошо: у меня есть три части:

  1. выборка
  2. парсинг
  3. хранение (в MySQL: это создание MySQL-дампа)

Так как у меня очень мало опыта работы с XPath, у меня есть Xpather-Tool в моемMozilla-браузер.Но я не уверен, как мне их применять - см. Данные, которые я собрал - ниже: Возможно, некоторые из вас могут помочь мне здесь - и покажите мне, как применить их в коде парсера:

Мне нравится слышать отyou

См. здесь некоторые детали: результаты (из приблизительно 213 различных записей) - см. две страницы результатов: - собрал несколько Xpath-данных:

Пример: Bürgerstiftung Wiesloch http://buergerstiftungen.de/cps/rde/xchg/SID-A7DCD0D1-702CE0FA/buergerstiftungen/hs.xsl/db_20289.htm

/ html / body / div [@ id = 'main'] / div [@ id = 'wrapper'] / div [@ id = 'inner'] / div [@ id ='marginalblock'] / div [1] / p

1.Gründungsgeschichte / html / body / div [@ id = 'main'] / div [@ id = 'wrapper'] / div [@ id = 'inner'] / div [@ id = 'contentblock'] / div/ р [1] / сильный

2.Kurzvorstellung / Ziele / html / body / div [@ id = 'main'] / div [@ id = 'wrapper'] / div [@ id = 'inner'] / div [@ id = 'contentblock']/ div / p [2] / span [2] / span / b

3.Projekte / 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

Вопрос: хорошо, как применить полученные данные в 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включен здесь.Это не проблема.И Xpath я должен ввести

в этой строке: $ xpath_query = "/ html / body / ...";

Вопрос: Должен ли я ввести все Xpaths, которые упомянуты выше .. от 1. до 3 ... и т. Д. Как это выглядит в конце концов? Можете ли выпомогите мне здесь - я очень новичок в php?

С нетерпением жду, чтобы услышать от вас!Большое большое спасибо за все и любую помощь!

ноль

1 Ответ

1 голос
/ 29 мая 2011

попробуйте что-то вроде этого

$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;

, вам просто нужно включить curl в вашем php.ini

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...