網頁抓取資訊(phpRegex、php操作excel)
1.問題描述
實現對固定網頁上自己需要的資訊抓取,以表格形式儲存。我是拿wustoj上的一個熱門排行榜來練習的,地址:wustoj
2.思路
網頁自己就簡單學習了一下php,剛好用它來做點事情吧,我的想法是這樣的:
(1)查看網頁原始碼並儲存在檔案中。
(2)根據需要的資訊寫出Regex,讀檔案,根據Regex來提取需要的資訊。寫Regex的時候最好分組,這樣提取起來就方便了很多。
(3)對excel操作,將提取的資訊以excel的形式輸出。
比較好的開源php處理excel類連結:點擊開啟連結
3.體會
^是指要是原字串的開頭,$是指要是原字串的結尾。
Null 字元不一定是空格。
用()來分組是好方法,如preg_macth_all(/$pattern/,$subject,matches)。
matches為二維數組,如果沒有_all,則只會匹配第一部分,是一維數組。
$matches[0]儲存完整模式的所有匹配。$matches[1]儲存第一子組所有匹配,即所有匹配的第一部分。
中文匹配串我用的這個$patt_ch=chr(0x80)."-".chr(0xff)。
4.代碼
1team30_姓名$namepatt="()(\*{0,1}team[0-9]+)(_)([$patt_ch]+)(<\/a>)"; // part2 part4//$namepatt="(team[0-9]+)(_)([$patt_ch]+)"; 也可以用這個直接匹配"team_姓名"//7$problempatt="()([0-9]+)(<\/a>)";//Include classrequire_once('Classes/PHPExcel.php');require_once('Classes/PHPExcel/Writer/Excel2007.php');$objPHPExcel = new PHPExcel();//Set properties 設定檔案屬性$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");$objPHPExcel->getProperties()->setCategory("Test result file");$row=1;$objPHPExcel->getActiveSheet()->setCellValue('A'.$row, 'rank');$objPHPExcel->getActiveSheet()->setCellValue('B'.$row, 'team');$objPHPExcel->getActiveSheet()->setCellValue('C'.$row, 'solved');while(!feof($file)){//echo $row." ";$line=fgets($file);if(preg_match("/$rankpatt/",$line,$match)){$row++;//print_r($match);//echo$match[2]." ";//echo"";$objPHPExcel->getActiveSheet()->setCellValue('A'.$row, $match[2]);$objPHPExcel->getActiveSheet()->getStyle('A'.$row)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);}if(preg_match("/$namepatt/",$line,$match)){//print_r($match);//echo$match[2]." ".$match[4]." ";//echo""; $objPHPExcel->getActiveSheet()->setCellValue('B'.$row, $match[2].$match[4]);}if(preg_match("/$problempatt/",$line,$match)){//print_r($match);//echo$match[2]." ";//echo"";$objPHPExcel->getActiveSheet()->setCellValue('C' . $row, $match[2]);$objPHPExcel->getActiveSheet()->getStyle('C'.$row)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);}$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);$objWriter->save(str_replace('.php', '.xlsx', __FILE__));}echo"well done:)";?>
5.運行結果
http://www.bkjia.com/PHPjc/1015087.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1015087.htmlTechArticle網頁抓取資訊(phpRegex、php操作excel) 1.問題描述 實現對固定網頁上自己需要的資訊抓取,以表格形式儲存。我是拿wustoj上的一個排...