gpt4 book ai didi

php - 抓取网站并获取表格数据

转载 作者:行者123 更新时间:2023-12-03 16:37:16 25 4
gpt4 key购买 nike

我进行了搜索,并查看了许多关于stackoverflow的示例,但仍然无法使其正常工作。

我想抓取一个网站来获取我的运动俱乐部的排名表。

我的问题是我无法从表中获取“ tr”内容。一开始我使用REGEX,但是后来我读到人们不推荐使用REGEX,所以现在我使用XPath,但无法使用它。

我要抓取的页面是:http://resultater.dai-sport.dk/tms/Turneringer-og-resultater/Pulje-Stilling.aspx?PuljeId=104

我现在拥有的代码是:

$doc = new DOMDocument();
$doc->loadHTMLFile("http://resultater.dai-sport.dk/tms/Turneringer-og-resultater/Pulje-Stilling.aspx?PuljeId=104"); // or you could load from a string using loadHTML();
$xpath = new DOMXpath($doc);
$elements = $xpath->query("/table/thead/tbody/tr");

print_r($elements);


我得到的结果是:DOMNodeList对象([length] => 0)

我完全错了吗?

最佳答案

正如@PeeHaa注意到的那样,tbody标记不在thead标记内(按常规代码)。但是,源代码中没有tbody标记,则可以使用:

$elements = $xpath->query("//table/tr");


要从网站提取数据,您可以使用以下方法:

$elements = $xpath->query("//table/tr[contains(@class,'sr')]");

$keys = array('nb', 'hold', 'k', 'v', 'u', 't', 'scoreA', 'scoreB', 'p');

foreach ($elements as $elt) {
$results[] = array_combine($keys,
preg_split('~^\s++|\s++$|\h*+\R\s*+-?\s*+~', $elt->textContent, null, 1)
);
}
echo '<pre>' . print_r($results, true);


另一种方法是使用 preg_match()并描述 textContent的结构。第二个链接的示例:

$pattern = <<<'LOD'
~
(?<kampnr> [0-9]++ ) \s++
(?<dato> [0-9]{2}-[0-9]{2}-[0-9]{2} ) \s++
(?>
kl\. \s++
(?<kl> [0-9]{2}:[0-9]{2} ) \s++
)?
(?<hjemmehold> .+? ) \h*+ \R \s++
(?<udehold> .+? ) \h*+ \R \s++
(?<spillA> .+? ) \h*+ \R \s++
(?<spillB> .+? ) \h*+ \R \s++
(?>
(?<resultatA> [0-9]++ ) \s*+ - \s*+
(?<resultatB> [0-9]++ )
)?
~xu
LOD;

foreach ($elements as $elt) {
if (preg_match($pattern, $elt->textContent, $match)) {
foreach($match as $k=>$v) {
if (is_numeric($k)) unset($match[$k]);
}
$result[] = $match;
}
}
echo '<pre>' . print_r($result, true);

关于php - 抓取网站并获取表格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19881324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com