从多个URLS php解析数据

时间:2018-02-07 21:31:39

标签: php html mysql parsing phpmyadmin

我想解析来自此链接的数据: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;
&#13;
&#13;

这是我的数据库结构:

&#13;
&#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;
&#13;
&#13;

提前致谢:)

1 个答案:

答案 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');

此方法您将获得最后一个表元素。顺便说一句,也许你应该检查是否存在任何表元素,如果没有,函数需要返回。