0

私がやろうとしているのは、Trip Advisor でページをスクレイピングすることです。最初のページから必要なものを取得し、次のページからコンテンツを取得するために別のループを実行しますが、これらの詳細を既存の配列に追加しようとすると、何らかの理由で機能しません。

error_reporting(E_ALL);
include_once('simple_html_dom.php');

$html = file_get_html('http://www.tripadvisor.co.uk/Hotels-g186534-c2-Glasgow_Scotland-Hotels.html');

$articles = '';

// Find all article blocks
foreach($html->find('.listing') as $hotel) {
    $item['name']     = $hotel->find('.property_title', 0)->plaintext;
    $item['link']     = $hotel->find('.property_title', 0)->href;

    $item['rating']    = $hotel->find('.sprite-ratings', 0)->alt;
    $item['rating']    = explode(' ', $item['rating']);
    $item['rating']    = $item['rating'][0];

    $articles[] = $item;
}

foreach($articles as $article) {

    echo '<pre>';
    print_r($article);
    echo '</pre>';

   $hotel_html = file_get_html('http://www.tripadvisor.co.uk'.$article['link'].'/');

   foreach($hotel_html->find('#MAIN') as $hotel_page) {
       $article['address']            = $hotel_page->find('.street-address', 0)->plaintext;
       $article['extendedaddress']    = $hotel_page->find('.extended-address', 0)->plaintext;
       $article['locality']           = $hotel_page->find('.locality', 0)->plaintext;
       $article['country']            = $hotel_page->find('.country-name', 0)->plaintext;

       echo '<pre>';
       print_r($article);
       echo '</pre>';

       $articles[] = $article;
    }
}

echo '<pre>';
print_r($articles);
echo '</pre>';

ここに私が得るすべてのデバッグ出力があります: http://pastebin.com/J0V9WbyE

URL: http://www.4playtheband.co.uk/scraper/

4

1 に答える 1

1

私なら、変えるね

$articles = '';

に:

$articles = array();

foreach() の前:

$articlesNew = array();

配列を反復処理するときは、新しい配列に挿入します

$articlesNew[] = $article;

最後に配列をマージします

$articles = array_merge($articles, $articlesNew);

ソース: http://php.net/manual/en/function.array-merge.phpより多くの配列 php マージ/結合。

PHP で配列を反復処理しているときに配列を変更しようとしたことは一度もありませんが、これを C++ コレクションで不適切に行うと、致命的な例外を処理しない限りクラッシュします。私の勝手な推測では、反復中に配列を変更するべきではありません。私は決してそれをしないことを知っています。別の変数を操作します。

于 2012-08-20T14:48:11.673 に答える