我想解析来自此链接的数据:http://plan.regenbogen-gesamtschule.de/vertretung/lehrer/subst_001.htm每15秒刷新一次新页面,一旦它到达最后一页再次启动,所以这是一个无限循环,页面数量每天都在变化目前它有4页(subst_001.htm,subst_002.htm,subst_003.htm,subst_004.htm)
我的脚本应该从所有链接获取数据并存储到我的数据库中。但我认为我有一个小错误,因为它只是从第一个URL(subst_001.htm)获取数据实际上它应该从所有URL获取数据。
这是我的剧本:
<?php
$conn = mysqli_connect("localhost","user","pw","konhostc_rges");
mysqli_query($conn,"Delete from timetable2");
$startUrl="subst_001.htm";
function getData($url) {
global $startUrl,$conn;
$html = file_get_contents('http://plan.regenbogen-gesamtschule.de/vertretung/lehrer/'.$url);
$DOM = new DOMDocument();
$DOM->loadHTML($html);
$meta = $DOM->getElementsByTagName('meta');
$metaUrl = explode("=",$meta[4]->attributes->getNamedItem('content')->nodeValue);
$nexUrl = $metaUrl[1];
//print_r($meta[4]->attributes->getNamedItem('content')->nodeValue); exit;
$month = $DOM->getElementsByTagName('div')->item(0);
$monthExp = explode(" ",$month->nodeValue);
$date = $monthExp[0];
$day = $monthExp[1];
$tables = $DOM->getElementsByTagName('table');
$domRows = $tables[2]->getElementsByTagName('td');
$i=0; //colms
$y=0; //rows
foreach($domRows as $domRow)
{
$data[$y][] = $domRow->nodeValue;
if($i === 8) {
$i = 0;
$y++;
} else {
$i++;
}
}
//Converting array to JSON
$JSON = json_encode($data, JSON_PRETTY_PRINT);
foreach($data as $row) {
$vertr = $row[0];
$std = $row[1];
$klasse = $row[2];
$raum = $row[3];
$art = $row[4];
$fach = $row[5];
$lehr = $row[6];
$bemerkung = $row[7];
$Neu = $row[8];
$date_timeTable=date("Y-m-d",strtotime($date));
mysqli_query($conn,"INSERT INTO timetable2 (vertr,std,klasse,raum,art,fach,lehr,bemerkung,Neu,pageName,date_timeTable,day_timeTable) VALUES ('$vertr','$std','$klasse','$raum','$art','$fach','$lehr','$bemerkung','$Neu','$url','$date_timeTable','$day') ") or die(mysqli_error($conn));
}
if(trim($nexUrl)!=$startUrl) {
getData($nexUrl);
}
}
getData($startUrl);
&#13;
这是我的数据库结构:
CREATE TABLE `timetable2` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`vertr` varchar(50) NOT NULL,
`std` varchar(50) NOT NULL,
`klasse` varchar(50) NOT NULL,
`raum` varchar(50) NOT NULL,
`art` varchar(50) NOT NULL,
`fach` varchar(50) NOT NULL,
`lehr` varchar(50) NOT NULL,
`bemerkung` varchar(50) NOT NULL,
`Neu` varchar(255) NOT NULL,
`pageName` varchar(255) NOT NULL,
`date_timeTable` date NOT NULL,
`day_timeTable` varchar(25) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
&#13;
提前致谢:)
答案 0 :(得分:0)
你调用它,但是第二个和第四个页面(subst_002.htm,subst_004.htm)只有2个表元素,第一个和第三个(subst_001.htm,subst_003.htm)有3个表元素。
这意味着您的代码会出现致命错误:
PHP致命错误:调用成员函数getElementsByTagName()on 在第22行的index.php中为null
这一行:
$domRows = $tables[2]->getElementsByTagName('td');
因此,在获取之前,应该检查哪个是最后一个表元素。像这样:
$domRows = $tables[sizeof($tables)-1]->getElementsByTagName('td');
此方法您将获得最后一个表元素。顺便说一句,也许你应该检查是否存在任何表元素,如果没有,函数需要返回。