В настоящее время я пытаюсь разобрать некоторые данные с форума. Вот код:
$xml = simplexml_load_file('https://forums.eveonline.com'); $names = $xml->xpath("html/body/div/div/form/div/div/div/div/div[*]/div/div/table//tr/td[@class='topicViews']"); foreach($names as $name) { echo $name . "<br/>"; }
Во всяком случае, проблема в том, что я использую расширение google xpath, чтобы помочь мне получить путь, и я предполагаю, что Google меняет html достаточно, чтобы он не появлялся, когда я использую свой сайт для этого поиска. Есть ли какой-то способ, по которому я могу заставить хоста посмотреть сайт через google chrome, чтобы он получил правильный код? Что ты предлагаешь?
Благодаря!
Мое предложение состоит в том, чтобы всегда использовать DOMDocument в отличие от SimpleXML, так как это более приятный интерфейс для работы и делает задачи более интуитивными.
В следующем примере показано, как загрузить HTML в объект DOMDocument и запросить DOM с помощью XPath. Все, что вам действительно нужно сделать, это найти все td- элементы с именем класса topicViews, и это выведет каждый из элементов nodeValue, найденный в DOMNodeList, возвращенный этим запросом XPath.
/* Use internal libxml errors -- turn on in production, off for debugging */ libxml_use_internal_errors(true); /* Createa a new DomDocument object */ $dom = new DomDocument; /* Load the HTML */ $dom->loadHTMLFile("https://forums.eveonline.com"); /* Create a new XPath object */ $xpath = new DomXPath($dom); /* Query all <td> nodes containing specified class name */ $nodes = $xpath->query("//td[@class='topicViews']"); /* Set HTTP response header to plain text for debugging output */ header("Content-type: text/plain"); /* Traverse the DOMNodeList object to output each DomNode's nodeValue */ foreach ($nodes as $i => $node) { echo "Node($i): ", $node->nodeValue, "\n"; }
Двойной '/' сделает поиск по xpath. Поэтому, если вы будете использовать xpath '// table', вы получите все таблицы. Вы также можете использовать это глубже в своей структуре xpath, например, «html / body / div / div / form // table», чтобы получить все таблицы под xpath «html / body / div / div / form».
Таким образом, вы можете сделать свой код немного более устойчивым к изменениям в источнике html.
Я предлагаю немного узнать о xpath, если вы хотите его использовать. Скопировать пасту только добирается до вас.
Простое объяснение синтаксиса можно найти по адресу http://www.w3schools.com/xpath/xpath_syntax.asp