2015-11-08 56 views
-2

我遇到了匹配结果的问题,这是我的脚本,无法找到如何从抓取的内容中添加链接并避免相同的结果?我只需要一个开始http://www.autogidas.lt/结果....preg_match_all查找链接,删除相同的结果?

<? 
$id= $_GET['id']; 
$user= $_GET['user']; 
$login=$_COOKIE['login']; 

$query = mysql_query("SELECT pavadinimas,nuoroda,kuras,data,data_new from autogidas where vartotojas='$user' and id='$id'"); 
$rezultatas=mysql_fetch_row($query); 

$url = "$rezultatas[1]"; 

$info = file_get_contents($url); 

function scrape_between($data, $start, $end){ 
$data = stristr($data, $start); 
$data = substr($data, strlen($start)); 
$stop = stripos($data, $end); 
$data = substr($data, 0, $stop); 
return str_replace(' ', ' ', $data); 
} 
$contents = scrape_between($info, "<table border=\"0\" cellspacing=\"0\">", "</table>"); 

    preg_match_all('/<span class="ttitle2".*?>(.*?)<\/span>/',$contents,$pavadinimas); 

    preg_match_all('/<span class="ttitle3".*?>(.*?)<\/span>/',$contents,$miestas); 

    preg_match_all('/<span class="ttitle1".*?>(.*?)<\/span>/',$contents,$metai_kaina); 

    foreach($metai_kaina[0] as $key=>$metai_kaina_val){ 
    if($key%2==0) 
    $metai[] = strip_tags($metai_kaina_val); 
    else 
    $kaina[] = strip_tags($metai_kaina_val); 
    } 

    preg_match_all('/<img .*?(?=src)src=\"([^\"]+)\"/si', $contents, $img_link); 
    preg_match_all('/<a href="http:\/\/www.autogidas.lt(.*?)"/s', $contents, $matches); 

    for($i=0; $i<count($pavadinimas[0]); $i++){ 
    echo '<tr> 
     <td><a href='HERE I NEED LINKS'><img src="'.$img_link[1][$i].'"></a></td> 
     <td>'.$pavadinimas[0][$i].'</td> 
     <td>'.$miestas[0][$i].'</td> 
     <td>'.$metai[$i].'</td> 
     <td><center>'.$kaina[$i].'</center></td> 
    </tr>'; 
    } 

    echo "</table>"; 
    ?> 

我尝试了一些帮助,但不知道如何更新脚本,最后一件事,我需要什么,无法找到如何做到这一点...我不是profi我只提供自己的PHP的乐趣,谢谢你的帮助!对不起,我的英文不好....

+0

添加您的'HTTP: \/\/www.adress.com'前缀到捕获组。 – mario

+0

问题是我不知道如何编辑这个正则表达式 – dagamo

+0

你能帮助我吗? – dagamo

回答

-1

您可以使用此代码:原来的问题所做的更改后

// RegEx to only match with http://www.address.com/* kind of URLs in anchors 
$regexp = "<a\s[^>]*href=(\"??)(http\:\/\/www\.adress\.com\/[^\" >]*?)\\1[^>]*>(.*)<\/a>"; 
if (preg_match_all("/$regexp/siU", $svetaines_turinys, $matches, PREG_SET_ORDER)) { 
    // collect results in array 
    $arr = []; 
    foreach($matches as $match) { 
     $arr[] = $match[2]; 
    } 
    // remove duplicates from it 
    $arr = array_unique($arr); 
    // send to client 
    foreach($arr as $match) { 
     echo "$match <BR/>"; 
    } 
} 

编辑:

你想获得独特的超链接,因为相同的超链接在您正在抓取的页面上使用两次。但是,这两个不完全相同的方式发生,只有两个中的一个后跟一个img标签,所以你可以按如下方式更改的正则表达式得到$matches

preg_match_all('/<a href="(http:\/\/www.autogidas.lt[^"]*)"\s*>\s*<img/s', 
    $contents, $matches); 

注意,在上述正表达式我也移动了左括号以匹配整个url,这是您在下面的代码中需要的。

然后在你的循环,可以输出你的引号字符串中使用这块超链接:

<a href="'.$matches[1][$i].'"> 

注意:你应该开始你的代码<?php不仅仅是<?

+0

你可以检查我的代码吗?我已经更新了它... – dagamo

+0

你能帮我吗? – dagamo

+0

我在回答中添加了您需要使用代码进行的操作,以避免重复的超链接以及如何输出它们。 – trincot