сначала позвольте мне сказать, что я прочитал здесь многочисленные «обрывки» потоков, и никто не помог мне. Я также проверил вокруг Интернета в течение нескольких дней, и теперь я приближаюсь к проводке. Я надеюсь, что кто-то может пролить свет на это для меня.
Я использую PHP Simple HTML DOM Parser для очистки некоторых данных со страницы. URL-адрес, с которым я работаю, содержит динамический контент, и я не могу заставить ничего работать, чтобы вытащить этот контент. Мне нужно очистить текст (plain) от <tr id="0" class="ui-widget-content jqgrow ui-row-ltr" role="row">
to <tr id="9" class="ui-widget-content jqgrow ui-row-ltr" role="row">
, я чувствую, что как только я получу один чтобы работать, я могу получить других. Поскольку эта информация на самом деле не находится на странице при загрузке страницы, а скорее приходит в складку после загрузки страницы, я попал в рут.
С учетом сказанного, вот что я пробовал:
echo file_get_html('http://sheriffclevelandcounty.com/p2c/jailinmates.aspx')->plaintext;
Вышеупомянутое покажет мне все, НО информация, в которой я нуждаюсь, вот так:
Я также попытался использовать пример из плагина, используя IMDb и модифицированный для моих нужд, вот он:
// Defining the basic cURL function function curl($url) { // Assigning cURL options to an array $options = Array( CURLOPT_RETURNTRANSFER => TRUE, // Setting cURL's option to return the webpage data CURLOPT_FOLLOWLOCATION => TRUE, // Setting cURL to follow 'location' HTTP headers CURLOPT_AUTOREFERER => TRUE, // Automatically set the referer where following 'location' HTTP headers CURLOPT_CONNECTTIMEOUT => 120, // Setting the amount of time (in seconds) before the request times out CURLOPT_TIMEOUT => 120, // Setting the maximum amount of time for cURL to execute queries CURLOPT_MAXREDIRS => 10, // Setting the maximum number of redirections to follow CURLOPT_USERAGENT => "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1a2pre) Gecko/2008073000 Shredder/3.0a2pre ThunderBrowse/3.2.1.8", // Setting the useragent CURLOPT_URL => $url, // Setting cURL's URL option with the $url variable passed into the function ); $ch = curl_init(); // Initialising cURL curl_setopt_array($ch, $options); // Setting cURL's options using the previously assigned array data in $options $data = curl_exec($ch); // Executing the cURL request and assigning the returned data to the $data variable curl_close($ch); // Closing cURL return $data; // Returning the data from the function } // Defining the basic scraping function function scrape_between($data, $start, $end){ $data = stristr($data, $start); // Stripping all data from before $start $data = substr($data, strlen($start)); // Stripping $start $stop = stripos($data, $end); // Getting the position of the $end of the data to scrape $data = substr($data, 0, $stop); // Stripping all data from after and including the $end of the data to scrape return $data; // Returning the scraped data from the function } $scraped_page = curl("http://sheriffclevelandcounty.com/p2c/jailinmates.aspx"); // Downloading IMDB home page to variable $scraped_page $scraped_data = scrape_between($scraped_page, '<table id="tblII" class="ui-jqgrid-btable" cellspacing="0" cellpadding="0" border="0" role="grid" aria-multiselectable="false" aria-labelledby="gbox_tblII" style="width: 456px;">', '</table>'); // Scraping downloaded dara in $scraped_page for content between <title> and </title> tags echo $scraped_data; // Echoing $scraped data, should show "The Internet Movie Database (IMDb)"
Конечно, ни одна из этих работ не работает, поэтому мой вопрос: как использовать PHP Simple DOM Parser для получения динамического содержимого, загружаемого после загрузки страницы? Возможно ли, или я просто полностью ошибаюсь здесь?
Я понимаю, что вам нужны динамические данные, которые поступают в jqgrid. Для этого вы можете использовать почтовый URL, который в ответ дает данные.
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://sheriffclevelandcounty.com/p2c/jqHandler.ashx?op=s"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS, array( 'rows'=>10000, //Here you can specify how many records you want 't'=>'ii' )); $output = curl_exec($ch); curl_close($ch); echo "<pre>"; print_r(json_decode($output));