2

私は自分のウェブサイトからデータを取得するためにPHPQuery( https://code.google.com/p/phpquery/ )を試しています。ページからメタ情報を抽出したい。

これが私がこれまでに試したことです:

$html = phpQuery::newDocumentHTML($file, $charset = 'utf-8');

$MetaItems = [];
foreach (pq('meta') as $keys) {
    $names = trim(strtolower(pq($keys)->attr('name')));
    if ($names !== null && $names !== '') {
        array_push($MetaItems, $names);
    }
}
            
for ($i=0; $i < count($MetaItems); $i++) {
    $test = 'meta[name="' . $MetaItems[$i] . '"]';
    echo pq($test)->html();
}

上:$MetaItemsすべてのメタ属性を取得しますname。この配列は正しく入力されています。

ただし、テキストの選択と抽出は機能しません。上記のコードを機能させるにはどうすればよいですか?ありがとう。

4

2 に答える 2

4

名前=>コンテンツの連想配列が必要ですよね?これを試して:

$metaItems = array();
foreach(pq('meta') as $meta) {
  $key = pq($meta)->attr('name');
  $value = pq($meta)->attr('content');
  $metaItems[$key] = $value;
}

var_dump($metaItems);
于 2012-12-21T02:16:57.557 に答える
0

抽出する値は、取得しようとしている名前属性の値とまったく同じであると仮定します...name属性の値では、大文字と小文字が区別されると確信しています。strtolowerとトリムを削除する必要があります。どちらも問題を引き起こしている可能性があります。私は最初の部分をこれに置き換えます:

$html = phpQuery::newDocumentHTML($file, $charset = 'utf-8');

$MetaItems = [];
foreach (pq('meta') as $keys) {
    $names = pq($keys)->attr('name');
    if (!empty($names) && trim($names)) {
        array_push($MetaItems, $names);
    }
}

それが役立つことを願っています

于 2012-12-21T01:11:30.543 に答える