2017-03-22 64 views
-3

我想從this site與PHP檢索數據並顯示它。顯示錶中的數據(從網站獲取)與PHP

我使用PHP中的pregmatch函數在3個不同的表格中檢索了期望的值(從文章的文章名稱,價格以及其他值)。剩下的就是將它們顯示在一個兩維的表格中。

表應該有商品名,在第一線的價格。其餘的行應包含標題後面跟着它們的值。

這是我目前的PHP代碼:

<?php 

$debut="https://www.agriconomie.com"; 
$txt = file_get_contents('https://www.agriconomie.com/pieces-agricoles/tracteur/attelage---relevage/pc2902'); /*ici c'est pour Lire la page html*/ 

$results = array(); 
// $test = preg_match_all('#<a href="(.*?)">#', $txt, $names_array); 

$test = preg_match_all('#<a href="(.+)" class="(.+)" title="(.+)"#', $txt, $names_array); 

/*recupéré les liens du site en particuliers le text qui se situe entre griffe "" du href*/ 

for($i = 0; $i < count($names_array[1]); $i++) 
{ 
    $j=$i; 

    $debut="https://www.agriconomie.com".$names_array[1][$i]; 

    $adresse =$debut; 
    /* echo $adresse ; ?> <br /> <?php */ 

    $page = file_get_contents ($adresse); 

    /* preg_match_all ('#<h3 class="product-name">(.+)</h3>#', $page, $names_array5); */      
    preg_match_all ('#(<dd>(.+)</dd>)#', $page, $names_array2); 
    preg_match_all ('#<span><i class="icon-chevron-right"></i>(.*?)</span>#', $page, $names_array3); 
    preg_match_all ('#<p class="price" itemprop="price" content="(.*?)">#', $page, $names_array4); 

    echo "<center>"; 

    echo "<table class='table table-bordered table-striped table-condensed'>"; 

    /* 
    for($j = 0; $j < count($names_array5[1]); $j++) 
    { 
     $NOM = $names_array5[1][$j]; 

     echo 'Nom ='.$NOM ; 
    } 
    */ 

    for($j = 0; $j < count($names_array4[1]); $j++) 
    { 
     $price = $names_array4[1][$j]; 
     echo  'Prix ='.$price.'$' ; 
    } 


    for($i = 0; $i < count($names_array3[1]); $i++) 
    { 
     for($j= 0; $j < count($names_array2[1]); $j++){ 
      $descriptif = $names_array2[1][$i]; 
     } 

     $intitule = $names_array3[1][$i]; 
     echo "<tr><td>".$intitule." </td> <td> ".$descriptif." </td> </tr> "; 
    } 
} 

echo "</table>"; 
echo "</center>"; 

?> 
+0

請發佈您的問題之前格式化你的代碼。 –

+0

如何格式化我的代碼?這是我的源代碼!請幫幫我 。 –

+0

您的代碼已被@Qirel格式化和編輯 –

回答

0

我發現很多事情來糾正/整齊了,所以我也幾乎全部重寫。

$debut="https://www.agriconomie.com"; 
$txt = file_get_contents('https://www.agriconomie.com/pieces-agricoles/tracteur/attelage---relevage/pc2902'); 

if(!preg_match_all('#<a href="([^"]*?)".*?title="([^"]*?)"#',$txt,$desarticles)){exit("Failure @ desarticles");} 
foreach($desarticles[1] as $i=>$url_ext){ 
    $page=file_get_contents("https://www.agriconomie.com{$url_ext}"); // https://www.agriconomie.com/clips-ordinaire-de-9x45-le-cent/p207990 

    if(!preg_match_all('#<p class="price" itemprop="price" content="(.*?)">#',$page,$desprix)){exit("Failure @ desprix ($i)");} 
    if(!preg_match_all('#<i class="icon-chevron-right"><\/i>(.*?)<\/span>.*?<dd>(.+)<\/dd>#s',$page,$information)){exit("Failure @ information ($i)");} 

    echo "<center>"; 
     echo "<table class='table table-bordered table-striped table-condensed'>"; 
      echo "<tr>"; 
       echo "<td>{$desarticles[2][$i]}</td>"; // borrow $i from iteration of $desarticles[1] 
       echo "<td>Prix ={$desprix[1][0]}$</td>"; // Price (only one per loop) 
      echo "</tr>"; 
      foreach($information[1] as $k=>$info){ 
       echo "<tr>"; 
        echo "<td>{$info}</td>"; 
        echo "<td>{$information[2][$k]}</td>"; // borrow $k from iteration of $information[1] 
       echo "</tr>"; 
      } 
     echo "</table>"; 
    echo "</center>"; 
} 

一些細微之處的:

  • 我加快了正則表達式在$ desarticles和省略中間捕獲組。
  • 我刪除了一些不必要的變量。
  • 我取代迭代/計數與foreach循環(以避免計數條件)環路。
  • 我將兩個preg_match_all行合併爲一個名爲$ information的行。
  • 我在$信息的正則表達式中逃避了結束標記。
  • 我按照要求創建了一個乾淨的基本的兩列表結構。
+0

@RubenLamboniBinban Voila,我盡力滿足您的要求並改進您的流程。我沒有測試這個代碼,所以如果有什麼不對,請給我留言,以便我能更正我的答案。與大多數人相比,我在這個問題上花費了更多的時間,所以如果滿意的話,我會要求你提供一個upvote和綠色標記。我期待聽到我的代碼如何適合你。 – mickmackusa