0

このコードを使用して、Web サイトから特定のデータをスクレイピングしています。

<!DOCTYPE html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">

    <title>scrap</title>
  </head>
  <body>
<?php
$url = 'http://xn--mgbaam1d9c.com';
$html = file_get_contents( $url);

libxml_use_internal_errors( true);
$doc = new DOMDocument;
$doc->loadHTML( $html);
$xpath = new DOMXpath( $doc);

// A name attribute on a <div>???
$node = $xpath->query( '//div[@class="list"]')->item( 0);

echo $node->textContent; 

?>

</body>
</html>

非常にうまく機能しているが、スクレイピング

  1. 結果には1つの結果しか表示されません。すべての結果を表示したいです(Webサイトにはページネーションがあります)。
  2. 結果はアラビア語で表示され、下の画像のように表示されます - http://i.stack.imgur.com/Z9VMn.png

では、すべての結果を取得してアラビア語で表示するにはどうすればよいですか。

前もって感謝します。

4

1 に答える 1

2
  1. 最初のアイテムしか取得していません.item(0)$xpath->queryプロパティDOMNodeListを持っているものを見てみましょう length
  2. エンコーディングをwindows-1256からutf-8using に変換しiconvます。

このようなもの:

$nodeList = $xpath->query( '//div[@class="list"]');

for ( $i = 0; $i < $nodeList->length; $i++ ) {
    $node = $nodeList->item($i);
    echo iconv('WINDOWS-1256','UTF-8',$node->textContent);
}

編集: mb_convert_encoding windows-1256 をサポートしていませんiconv。代わりに切り替えました。


HTML メタからコンテンツ エンコーディングを動的に取得することもできます。

$fromEncoding = '';
$contentType = $xpath->query('//meta[@http-equiv="content-type"]')->item(0)->getAttribute('content');
preg_match('/charset=([A-Za-z0-9_-]+)$/',$contentType,$contentTypeMatches);
if ( isset($contentTypeMatches[1]) ) {
    $fromEncoding = strtoupper($contentTypeMatches[1]);
}
于 2013-11-01T00:21:42.813 に答える