如何使用curl打印网页的某些部分

时间:2018-04-02 22:02:31

标签: php html parsing curl

我试图让页面的某些部分显示在输出中。

<?php //right wing - up to ages 22 - potential range of 84 to 99 
$ch = curl_init("https://sofifa.com/players? 
aeh=22&ptl=84&pth=99&pn=27&pn=25&pn=23");// This will do
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$output = curl_exec($ch);
echo $output;
curl_close($ch); 
?> 

上面的代码打印了URL的整个html。我希望显示某些部分,例如玩家名称。下图显示了整个页面的输出。我试图只显示球员的名字,以及他们的评分,年龄和潜力。所以例如页面应该输出:L SANE:年龄:21 OV:84:PO 92.

有什么方法可以做到这一点吗? Image of page

1 个答案:

答案 0 :(得分:0)

您不使用curl来显示parts of the page,而是使用它来获取页面。然后,一旦你得到页面,你必须使用其他东西来解析你感兴趣的页面部分。页面用HTML编写,检查this answer以获取PHP的HTML解析实用程序列表

至于如何解析此特定网页中的特定信息,页面中只有一个tbody标记,每个玩家都有自己的专用tr标记,这是一个直接的子标记。那个tbody标记,因此您可以迭代tr标记的tbody子项来迭代玩家。这些tr个代码中的每一个都有td个孩子,其中包含您想要的信息。第二个td标签的文本内容有他们的名字,第三个有年龄,第四个有评级,第五个有潜力。

使用DOMDocument解析器的示例:

<?php
declare(strict_types = 1);
$ch = curl_init ( "https://sofifa.com/players?aeh=22&ptl=84&pth=99&pn=27&pn=25&pn=23" );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
$output = curl_exec ( $ch );
curl_close ( $ch );
$domd = @DOMDocument::loadHTML ( $output );
foreach ( $domd->getElementsByTagName ( "tbody" )->item ( 0 )->getElementsByTagName ( "tr" ) as $tr ) {
    $tds = $tr->getElementsByTagName ( "td" );
    $player = array (
            'name' => trim ( $tds->item ( 1 )->textContent ),
            'age' => trim ( $tds->item ( 2 )->textContent ),
            'rating' => trim ( $tds->item ( 3 )->textContent ),
            'potential' => trim ( $tds->item ( 4 )->textContent ) 
    );
    print_r ( $player );
}
相关问题