2

データベースからレコードを抽出し、テキストのみのHTMLページに保存しました。各レコードは<p>段落フィールドに格納され、改行<br />と行<で区切られhr>ます。例えば:

Company Name<br/>
555-555-555<br />
Address Line 1<br />
Address Line 2<br />
Website: www.example.com<br />

これらのレコードをCSVファイルに配置する必要があります。fputcsvをarray()およびfile_get_contents()と組み合わせて使用​​しましたが、Webページのソースコード全体が.csvファイルに読み込まれ、多くのデータも欠落していました。これらは、同じ形式で保存された複数のレコードです。したがって、上記のようにレコードブロック全体の後で、<hr>行タグで区切られます。以下に示すように、会社名を[名前]列に、電話番号を[電話]列に、住所を[住所]列に、[Webサイト]を[Webサイト]列に読みたいと思います。

http://i.stack.imgur.com/00Gxw.png
どうすればこれを行うことができますか?

HTMLの抜粋:

            1 Stop Signs<br />
            480-961-7446<br />
500 N. 56th Street<br />
        Chandler, AZ  85226<br />

<br />
                Website: www.1stopsigns.com<br />
            <br />
            </p><br /><hr><br />

HTMLのソースでは、このように間隔が空けられています。

4

3 に答える 3

3

<hr>データが、すべてのレコードがタグで区切られ、その中のすべてのフィールドが で区切られているパターンに従っていると仮定すると、データ<br />を分割できるはずです。

これを行う方法はたくさんありますが、次のような単純な方法を使用して機能するexplode()可能性があります。

// open a file pointer to csv
$fp = fopen('records.csv', 'w');

// first, split each record into a separate array element
$records = explode('<hr>', $str);

// then iterate over this array
foreach ($records as $record) {

    // strip tags and trim enclosing whitespace
    $stripped = trim(strip_tags($record));

    // explode by end-of-line
    $fields = explode(PHP_EOL, $stripped);

    // array walk over each field and trim whitespace
    array_walk($fields, function(&$field) {
        $field = trim($field);
    });

    // create row
    $row = array(
        $fields[0], // name
        $fields[1], // phone
        sprintf('%s, %s', $fields[2], $fields[3]), // address
        $fields[6], // web
    );

    // write cleaned array of fields to csv
    fputcsv($fp, $row);
}

// done
fclose($fp);

$str解析しているページ データはどこにありますか。お役に立てれば。

編集

もともと特定のフィールド要件に気づきませんでした。例を更新しました。

于 2012-02-17T00:03:44.290 に答える
2

最も簡単な方法は、単にブロックを取得し、<hr>タグから前方にすべてをドロップしてから、文字列をタグの文字列配列として分割すること<br />です。

于 2012-02-17T00:02:30.790 に答える
2

上記の html が整形式であると仮定すると、この問題への私のアプローチは 2 つのフェーズにある必要があります。初め。情報をより効率的にエクスポートまたは管理できるように、html テキストを少しクリアします。ここで、保存したいアイテムをクリアし、近い将来必要としないことがわかっているアイテムを削除してみてください。

$html = preg_replace("|\s{2,}|si"," ",$html); // clear non neccesary spaces
$html = preg_replace("|\n{2,}|si","\n",$html); // convert more return line to only one
$html = preg_replace("|<br />|si","##",$html); // replace those tags with this one

次に、これに似た、よりクリーンな html を使用できます。

1 Stop Signs##
480-961-7446##
500 N. 56th Street##
Chandler, AZ  85226##
Website: www.1stopsigns.com##
##
</p>##<hr>##

2番。これで、フィールドを分解するか、コンマ区切りの値に内破して csv を形成できます

// here you'll have the fields to work with into the array called $csv_parts
$csv_parts = explode("##",$html);

// imploding, so there you have the formatted csv similar to 1 Stop Signs,480-961-7446,..
$csv = implode(",",$csv_parts);

これで、フィールドの抽出または csv のエクスポートのために html を操作する 2 つの方法が得られます。


これが役に立ち、必要なものを開発するためのアイデアを与えてくれることを願っています。

于 2012-02-17T00:03:04.190 に答える