2013-08-20 20 views
0

我試着去閱讀一小塊的網站代碼,http://www.site.com/category讀取文件,並寫入表文件中

而且一段代碼,我想找到這個樣子的:

<div class="Brands"> 
    <h2>Search design</h2> 
    <div class="columns"> 
     <div class="column first"> 
      <div> 
       <a href="/category?Brand=flash">flash</a> 
       <span>(9)</span> 
      </div> 
      <div> 
       <a href="/category?Brand=bolt">bolt</a> 
       <span>(4)</span> And so on... 

我想要做的是閱讀一個href地址,並在此之前把名字放在一個2列的表中。
防爆
閃存wwwsitecom /類別?品牌=閃光燈
螺栓wwwsitecom //類別?品牌=螺栓

我已經嘗試了幾種不同的方式,但不能很解決問題。

<?php 
$search = 'columns'; 
$lines = file('http://www.site.com/category'); 

// Store true text found 
$found = false; 
foreach ($lines as $line) { 
    if (strpos($line, $search) !== false) { 
     $found = true; 
     echo $line; 
    } 
} 

// text not found 
if (!$found) { 
    echo 'No match found'; 
} 
?> 

這給了我一個品牌的名單,但每個品牌後,我希望頁面直接鏈接顯示。

任何想法如何我可以添加該功能?

+0

「之前」是什麼意思?最簡單的方法是在解析網站內容時創建一個關聯數組,然後在數組中稍後寫入。 – Sugar

+0

我編輯了我的問題,記住我是新來的php。 =) – user2338731

回答

0

我按照你開始解析文件的方式,一行一行,但是你必須確保格式不會改變。這應該會給你一個像(BRAND => LINK)這樣的關聯數組。

我使用了explode(),因爲它與您提供的HTML模式並不難,但如果並非所有鏈接都遵循此模式(/ category?),則可能需要進行一些調整(品牌= flash & key = value會例如工作)。

查看如何使用正則表達式,如果它變得更復雜。

foreach($lines as $line) 
{ 
    if(strpos($line, $search) !== false) 
    { 
    $found = true; 
    $tmp = explode ('<div>', $line); // -> <a href="/category?Brand=flash">flash</a><span>(9)</span></div> 
    $count = count ($tmp); 
    for ($i = 1; $count - 1; ++$i) { 
     $tmp_href = explode ("\"", $tmp[$i]); // -> $tmp_href[1] = wanted href 
     $tmp_brand = explode ('=', $tmp_href); // -> $tmp_brand[1] = wanted brand 
     $brand_array[$tmp_brand[1]] = 'http://www.site.com' . $tmp_href[1]; 
    } 
    } 
} 

如果你想要的東西方式更可靠,或者如果你要分析大量的HTML文件來獲得鏈接,品牌,等等......你應該嘗試找到一個很好的庫來解析HTML文件。有大量的圖書館在做它。