从HTML页面创建CSV文件

时间:2012-02-16 23:28:27

标签: php html-parsing export-to-csv

我从数据库中提取记录并将其存储在仅包含文本的HTML页面上。每条记录都存储在<p>段落字段中,并以换行符<br />和行&lt; 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的源代码中间隔如此。

3 个答案:

答案 0 :(得分: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是您要解析的页面数据。希望这会有所帮助。

修改

最初没有注意到具体的现场要求。更新了示例。

答案 1 :(得分:2)

到目前为止,最简单的方法是简单地使用块,从<hr>标记向前删除所有内容,然后将字符串拆分为<br />标记上的字符串数组。

答案 2 :(得分: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。


希望这有助于或帮助您了解所需的内容。