如何使用 cURL 和 preg_match_all 在源列表中抓取多行

问题描述 投票:0回答:1

嘿,我正在尝试抓取网站上的特定内容,就像这样

  <td><a href="javascript:void(0)" class="rankRow"
                                                                           data-rankkey="25">
                                                                                    Averages
                                                                            </a>
                                                                    </td>
                                                                    <td class="page_speed_602217763">
                                                                            82.84                                                                        </td>
                                                            </tr>

我试图获取数字 82,84,其中 page_speed_** 数字变化,并且与源列表的其余部分不同的常量是文本“平均值”

我尝试过使用 preg_match_all 但似乎无法搜索超过一行以及中间的任何内容。

我使用的代码如下

<?php
        $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $Player1Link);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      $curlresult = curl_exec($curl);
      preg_match_all('!data-rankkey="25">Averages</a></td><td class="(\d.*)</tr>!', $curlresult, $matches);
      print_r($matches);
    
      $P1AvgHigh = $matches[0][3];
      echo "<br>";
      echo $P1AvgHigh;
      curl_close($curl);
?>

提前致谢

php regex web-scraping curl preg-match-all
1个回答
0
投票

首先,您的类声明不完整,并且您错过了第二个 td 的内容...也许这是您的代码的不完整副本?您还需要考虑每个元素之间和内部的空白。

这是我的正则表达式,它看起来可以工作(但可能需要根据您的精确要求和内容中可能的值进行调整)...

data-rankkey="25">[\s]*Averages[\s]*<\/a>[\s]*<\/td>[\s]*<td class="page_speed_([\d]*)">[\s]*([\d]*.[\d]*)[\s]*</td>[\s]*<\/tr>

我已经转义了正斜杠,这对你来说可能不需要。

© www.soinside.com 2019 - 2024. All rights reserved.