2013-08-20 21 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文件。有大量的图书馆在做它。