使用Goutte提取命名空间属性值

时间:2018-01-12 22:37:56

标签: php goutte

我正在尝试检查是否可以阅读网页的<html>属性以获取所有者声明的语言。

我检查过99%的网站,我发现信息写为<html lang="XX"><html lang="XX-YY">,但在1个特定网站中我发现它写为<html xml:lang="XX">,最后一种情况是给出我很头疼。

我试过

$scraper_client = new \Goutte\Client();
$scraper_crawler = $scraper_client->request('GET', $link);
$response = $scraper_client->getResponse();

var_dump( $scraper_crawler->filter('html')->extract('xml:lang')) );
var_dump( $scraper_crawler->filter('html')->extract('xml|lang')) );
var_dump( $scraper_crawler->filter('html')->extract('xml::lang')) );
var_dump( $scraper_crawler->filter('html')->extract('@[xml:lang]')) );

但他们似乎都没有工作。有没有人做过类似的事情? 先感谢您。 S上。

修改

只是为了完成这个问题,这是一个包含导致我出现问题的xml:lang属性的链接:

http://www.ilgiornale.it/news/politica/silvio-berlusconi-centrodestra-oggi-pi-forte-passato-1482545.html

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但它就像Goutte一样切断了这个属性。

我只能用正则表达式获取值:

$scraper_client = new \Goutte\Client();
$scraper_crawler = $scraper_client->request('GET', $link);
$response = $scraper_client->getResponse();
if (preg_match('/xml:lang=["\']{1}(.*?)["\']{1}/', $response, $matches)) {
    var_dump($matches[1]);
} else {
    echo 'not found';
}