Разбор HTML-таблиц через DOM

Я считаю, что разметка страницы является частью проблемы, которую я испытываю, поэтому я думаю, что мне нужно опубликовать источник и JSFiddle JSFiddle и оригинальную страницу GIS

Я пытаюсь получить информацию, такую ​​как Name: and Address: из таблицы внизу.

попытка решения:

Я написал следующий код, надеясь увидеть все данные таблицы, но таблица, в которой я хочу получить данные, ничего не возвращает.

<?php $k=0; $num=1000; var_dump(libxml_use_internal_errors(true)); $domOb = new DOMDocument(); $html = @$domOb->loadHTMLFile('http://www.gis.catawba.nc.us/website/Parcel/parcel_main.asp?Cmd=query&key=372215634301&type=P'); $domOb->preserveWhiteSpace = false; $items = $domOb->getElementsByTagName('td'); while ($k<(int)$num){ echo $items->item($k++)->nodeValue.'<br>'; }; ?> 

все, что вернулось, было:

bool (false) Поиск недвижимости – Наследие Карта Слои видны Часто задаваемые вопросы Помощь GIS Главная

Поэтому я надеюсь, что кто-то скажет мне, что я делаю неправильно, чтобы пропустить все данные, которые я ищу? Как я могу просто и просто потянуть просто имя и адрес?

попытался также использовать Xpath, но получить много предупреждений …

  $dom = new DOMDocument; $dom->load('http://www.gis.catawba.nc.us/website/Parcel/parcel_main.asp?Cmd=query&key=372215634301&type=P'); $s = simplexml_import_dom($dom); echo $name = $s->xpath('//table[@class="words13]/td[contains(text(), "Name:")]'); echo $add = $s->xpath('//table[@class="words13]/td[contains(text(), Address:)]'); 

Используя код пользователя2518542 и в сочетании с кодом hakre, я получаю следующее

  $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.gis.catawba.nc.us/website/Parcel/parcel_main.asp?Cmd=QUERY&key=372215634301&type=P&width=1280&height=923"); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $result=curl_exec ($ch); curl_close ($ch); $doc->loadHTML($result); $tds = $doc->getElementsByTagname('td'); foreach($tds as $td) { printf(" * %s\n", $td->textContent); echo '<br>'; } 

После этого успешно распечатываются все теги.

Ячейки таблицы, которые вы ищете, не являются частью этого документа HTML. Прежде всего вам нужно понять основы webscraping, я предлагаю вам взять некоторые книги по этой теме и прочитать их.

Время для библиотеки;)


В случае, если ячейки таблицы находятся в документе (по-видимому, они меняются, иногда они есть, иногда это не так), показывает оригинальный пример, это также демонстрирует, как перебирать DOMNodeList :

 $doc = new DOMDocument(); libxml_use_internal_errors(true); $doc->loadHTMLFile('Catawba County Legacy Map Server.html'); $tds = $doc->getElementsByTagname('td'); foreach($tds as $td) { printf(" * %s\n", $td->textContent); } 

Примерный вывод:

 php "test.php" (in directory: /home/hakre/php/test) * * Real Estate Search - Legacy * * * * * * * * * * Map Layers * visible * * * Parcels * * Parcel Annotation * * Address Points * * Misc. Lines * * Structures * * Contour Lines * * Soils * * Townships * * Water Features * * Tiles * * Flood Zone * * Agricultural District * * Aerial 2009 * * Aerial 2005 * * Aerial 2002 * * Cities * * Print the Map * Print Map and Parcel Report * Print the Parcel Report * Assessment Report * List all Owners * Deed History Report * Parcel Information: * Owner Information: * Parcel ID: 372215634301 * Name: PENLEY TREASURE B * Parcel Address: 3152 7TH AV SE * Name2: * City: CONOVER 28613 * Address: 5508 SWINGING BRIDGE RD * LRK(REID): 57186 * Address2: * Deed Book/Page: 1906/0741 Deed Image * City: CONOVER * Subdivision: FOREST HGTS * State/Zip: NC 28613-7415 * Lots: 1-4 * * Block: C * * Last Sale: * School Information: * Plat Book/Page: 8/119 Plat Image * School District: COUNTY * Calculated Acreage: 0.31 * Elementary School: WEBB A MURRAY * Tax Map: 167H 04006A * Middle School: ARNDT * State Road: * High School: ST STEPHENS * Township: HICKORY * School Map * * * Tax/Value Information:  Tax Rates(pdf) * Zoning Information: * Municipal Tax District: * Zoning District: HICKORY * Fire District: HICKORY RURAL * Zoning1: OI * Tax Account Number: * Zoning2: * Market Building(s) Value: $55,400 * Zoning3: * Market Land Value: $20,300 * Zoning Overlay: * Market Total Value: $75,700 * Small Area: * Year Built/Remodeled: 1959 * Split Zoning District 1/2: 0/0 * Current Tax Bill * Zoning Agency Phone Numbers * Miscellaneous: * * Voter Precinct:P35 * Firm Panel Date: 9/5/2007 * Building Permits for this parcel * Firm Panel #: 3710372200J * WaterShed: * 2010 Census Tract: 011000 * WaterShed Split: * 2010 Census Block: 3035 * Parcel Report Data Descriptions * Agricultural District: * FAQ's * Help * GIS Home Compilation finished successfully. 

Используйте XPath для поиска //table[@class="words13]/td[contains(text(), 'Name:')] и //table[@class="words13]/td[contains(text(), 'Address:')]

Попробуй это

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.gis.catawba.nc.us/website/Parcel/parcel_main.asp? Cmd=QUERY&key=372215634301&type=P&width=1280&height=923"); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $result=curl_exec ($ch); curl_close ($ch); echo $result;exit; 

вы получите полный источник страницы, а затем вы можете просто получить все, что хотите, через pregreplace.