【问题标题】:get table data with curl and regex使用 curl 和 regex 获取表数据
【发布时间】:2014-09-02 07:28:41
【问题描述】:

这是我从表中提取数据的代码。

但我想删除链接。

以及如何排列标题和价格。

<?php

$ch = curl_init ("http://www.digionline.ir/Allprovince/CategoryProducts/cat=10301");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec($ch);

preg_match('#<table[^>]*>(.+?)</table>#is', $page, $matches);
foreach ($matches as &$match) {
$match = $match;
}
echo '<table>';

echo  $match ;
echo '</table>';

?>  

【问题讨论】:

  • 最终输出是什么?
  • 提取产品名称和价格 // 语言是波斯语
  • 并将所有数据放入一个数组中?
  • with top procedure can't extract in to array // 我想将数据提取到数组中

标签: php html xpath web-scraping domdocument


【解决方案1】:

我建议改用 HTML 解析器。使用DOMDocument + DOMXpath,无需安装它们已经内置。示例:

$ch = curl_init ("http://www.digionline.ir/Allprovince/CategoryProducts/cat=10301");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec($ch);

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($page);
libxml_clear_errors();
$xpath = new DOMXpath($dom);

$data = array();
// get all table rows and rows which are not headers
$table_rows = $xpath->query('//table[@id="tbl-all-product-view"]/tr[@class!="rowH"]');
foreach($table_rows as $row => $tr) {
    foreach($tr->childNodes as $td) {
        $data[$row][] = preg_replace('~[\r\n]+~', '', trim($td->nodeValue));
    }
    $data[$row] = array_values(array_filter($data[$row]));
}

echo '<pre>';
print_r($data);

$data 应包含:

Array
(
    [0] => Array
    (
        [0] => AMDA4-3400
        [1] => 1,200,000
        [2] => 1,200,000
    )

    [1] => Array
    (
        [0] => AMDSempron 145
        [1] => 860,000
        [2] => 910,000
    )

【讨论】:

  • @amirrasabeh 确定没问题,很高兴它有帮助
  • 当然,如何每天用 curl 更新页面我猜玉米工作可以更新页面..但我不知道如何使用它
  • @Ghost 感谢您提供此代码,但您能帮我解决其他表格结构吗?这是我需要的:example。问候
  • @Peacefull 思路一样,用curl获取html,用DOM解析实际html
【解决方案2】:

如果你想解析一些网络资源,你可以使用PHP Simple HTML DOM Parser

如果你想得到一个表格和表格内的所有链接:

$html = file_get_html('http://www.digionline.ir/Allprovince/CategoryProducts/cat=10301');
$table = $html->find('table');
$links = $table->find('a');

echo $table;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 2018-02-11
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多