Domanda

I have a problem, I want to get data from another website and display it on my website using cURL.

For example, this is data from the other website which I would like to parse and display on my website.

<div class="users-name"> <a href='#'>User 1</a></div>
<div class="users-name"> <a href='#'>User 2</a></div>
<div class="users-name"> <a href='#'>User 3</a></div>
<div class="users-name"> <a href='#'>User 4</a></div>
<div class="users-name"> <a href='#'>User 5</a></div>
<div class="users-name"> <a href='#'>User 6</a></div>
<div class="users-name"> <a href='#'>User 7</a></div>
<div class="users-name"> <a href='#'>User 8</a></div>

<div class="users-name-address"><a href='#'>User 1 Address</a></div>
<div class="users-name-address"><a href='#'>User 2 Address</a></div>
<div class="users-name-address"><a href='#'>User 3 Address</a></div>
<div class="users-name-address"><a href='#'>User 4 Address</a></div>
<div class="users-name-address"><a href='#'>User 5 Address</a></div>
<div class="users-name-address"><a href='#'>User 6 Address</a></div>
<div class="users-name-address"><a href='#'>User 7 Address</a></div>
<div class="users-name-address"><a href='#'>User 8 Address</a></div>

Currently I'm getting all user names, but now I want to get all of this address along with User name so i will place correct address with correct user.

I have tried this so far:

$curl = curl_init('www.domain.com/search.php');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

$page = curl_exec($curl);

if(curl_errno($curl)) // check for execution errors
{
    echo 'Scraper error: ' . curl_error($curl);
    exit;
}

curl_close($curl);

$regex = '/<div class="users-name">(.*?)<\/div>/s';

if(preg_match_all($regex, $page, $list))
    print_r($list[0]);
else
    print "Not found";
È stato utile?

Soluzione

A way to do that without regex:

$dom = new DOMDocument();
@$dom->loadHTML($page);

$xpath = new DOMXPath($dom);

$queryName = '//div[@class = "users-name"]/a';
$queryAddress = '//div[@class = "users-name-address"]/a';

function getTextFromNodes($nodeList) {
    $textArray = array();
    foreach($nodeList as $listItem) {
        $textArray[] = $listItem->textContent; 
    }
    return $textArray;
}

$names = getTextFromNodes($xpath->query($queryName));
$addresses = getTextFromNodes($xpath->query($queryAddress));

$result = array_combine($names, $addresses);

print_r($result);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top