我遇到匹配结果的问题,这是我的脚本,无法找到如何从抓取的内容添加链接并避免相同的结果?我只需要开始http://www.autogidas.lt/ ....
的结果 <?
$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 :(得分:-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
而不仅仅是<?