網頁抓取資訊(phpRegex、php操作excel)_PHP教程

來源:互聯網
上載者:User

網頁抓取資訊(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上的一個排...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.