Selecting a specific div from a extern webpage using CURL

25,841

Solution 1

HTML isn't regular, so you shouldn't use regex. Instead I would recommend a HTML Parser such as Simple HTML DOM or DOM

If you were going to use Simple HTML DOM you would do something like the following:

$html = str_get_html($file_contents);
$elem = $html->find('div[id=wrapper_content]', 0);

Even if you used regex your code still wouldn't work correctly. You need to get the contents of the page before you can use regex.

//wrong
if(!preg_match($s_searchFor, $ch)){
    $file_contents = curl_exec($ch);
}

//right
$file_contents = curl_exec($ch); //get the page contents
preg_match($s_searchFor, $file_contents, $matches); //match the element
$file_contents = $matches[0]; //set the file_contents var to the matched elements

Solution 2

include('simple_html_dom.php');
$html = str_get_html($file_contents);
$elem = $html->find('div[id=wrapper_content]', 0);

Download simple_html_dom.php

Share:
25,841
Paul
Author by

Paul

🤘🏻

Updated on July 09, 2022

Comments

  • Paul
    Paul almost 2 years

    Hi can anyone help me how to select a specific div from the content of a webpage.

    Let's say i want to get the div with id="wrapper_content" from webpage http://www.test.com/page3.php.

    My current code looks something like this: (not working)

    //REG EXP.
    $s_searchFor = '@^/.dont know what to put here..@ui';    
    
    //CURL
    $ch = curl_init();
    $timeout = 5; // set to zero for no timeout
    curl_setopt ($ch, CURLOPT_URL, 'http://www.test.com/page3.php');
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    if(!preg_match($s_searchFor, $ch))
    {
      $file_contents = curl_exec($ch);
    }
    curl_close($ch);
    
    // display file
    echo $file_contents;
    

    So i'd like to know how i can use reg expressions to find a specific div and how to unset the rest of the webpage so that $file_content only contains the div.

  • huykon225
    huykon225 almost 7 years
    str_get_html() function is not defined. why?