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() 结合使用,但它会将网页的整个源代码读入一个 .csv 文件,并且也丢失了很多数据。这些是以相同格式存储的多条记录。因此,在如上所示的整个记录​​块之后,它由<hr>行标签分隔。我想将公司名称读入名称列,将电话号码读入电话列,将地址读入地址列,将网站读入网站列,如下所示。

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>标签分隔,其中的每个字段由 a 分隔,<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 格式正确,我解决这个问题的方法必须分两个阶段。第一的。清除一点 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>##

第二。现在您可以分解字段或将内爆成逗号分隔值以形成 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);

现在您将有两种方法来使用 html 来提取字段或导出 csv。


希望这有助于或给你一个想法来开发你需要的东西。

于 2012-02-17T00:03:04.190 回答