Preg_match_all如何正确获取所有信息?

时间:2015-11-05 10:04:38

标签: php arrays web-scraping preg-match-all

无法理解如何正确地从网络获取所有信息,而不仅仅是一行而是全部。

此脚本生成输出:Array Array Array Array且只有一行。

def to_seq(s):
    k, vs = s.split(":")
    for v in vs.split():
        yield k, v

text = sc.parallelize(["1: 6 7", "2: 5"])
res = text.flatMap(to_seq)
res.take(3)

## [('1', '6'), ('1', '7'), ('2', '5')]

4 个答案:

答案 0 :(得分:0)

preg_match_all进行深度复杂搜索。最大值是二维数组。阅读docs

  

如何正确获取所有信息?

为此,要找出你只是转出所有结果信息:

print_r($pavadinimas);
print_r($miestas);
...
  

但我需要将所有信息放在表格中

更有创造力;如果$pavadinimas是2d数组:

echo '<table>';
foreach($p in $pavadinimas){
    echo '<tr>'; 
    foreach($item in $p){
         echo '<td>' ,  $item , '</td>' ;
    } 
    echo '</tr>';   
}
echo '</table>';

注意

要反转二维数组顺序,只需在 preg_match_all 中使用标记( PREG_PATTERN_ORDER PREG_SET_ORDER )(参见标记文档中的部分)。因此,您将拥有其他订单的表格。

答案 1 :(得分:0)

函数的$matches参数将始终是一个数组 - 您需要在将变量添加到输出字符串之前处理该变量。

http://php.net/manual/en/function.preg-match-all.php

据我所知,你不能print_r混合使用字符串和数组。

答案 2 :(得分:0)

如果所有匹配都返回相同数量的结果,这似乎是由$ output结构隐含的,则迭代其中一个结果:

$output = '';
foreach ($pavadinimas[1] as $index => $match) { 
    $output .= '<tr><td><img src=' . $img_link[1][$index] . '></td><td>' . $match . '</td><td>' . $miestas[1][$index] . '</td><td>' . $metai[1][$index] . '</td><td>' . $kaina[1][$index] . '</td></tr>';    
}

答案 3 :(得分:0)

试试这个。它根据需要提取数据。

    <table style="border: 1px solid black;" id="rounded-corner" width=100%>
    <tr>
      <td style="border: 1px solid black;">Nuotrauka</td>
      <td style="border: 1px solid black;">Pavadinimas</td>
      <td style="border: 1px solid black;">miestas</td>
      <td style="border: 1px solid black;">metai</td>
      <td style="border: 1px solid black;">kaina</td>
    </tr>
<?php
  $url = "put_your_url";
  $contents = file_get_contents($url); 

  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);

  for($i=0; $i<count($pavadinimas[0]); $i++){
    echo '<tr>
          <td style="border: 1px solid black;"><img src="'.$img_link[1][$i+2].'"></td>
          <td style="border: 1px solid black;">'.$pavadinimas[0][$i].'</td>
          <td style="border: 1px solid black;">'.$miestas[0][$i].'</td>
          <td style="border: 1px solid black;">'.$metai[$i].'</td>
          <td style="border: 1px solid black;">'.$kaina[$i].'</td>
        </tr>';
    }
?>
</table>