網頁抓取資訊(php正則表達式、php操作excel)

來源:互聯網
上載者:User

標籤:user   gets   class   art   gen   mod   com   自己   完整   

1.問題描寫敘述

實現對固定網頁上自己須要的資訊抓取,以表格形式儲存。

我是拿wustoj上的一個熱門排行榜來練習的,地址:wustoj


2.思路

網頁自己就簡單學習了一下php,剛好用它來做點事情吧,我的想法是這種:

(1)查看網頁源碼並儲存在檔案裡。

(2)依據須要的資訊寫出正則表達式。讀檔案,依據正則表達式來提取須要的資訊。寫正則表達式的時候最好分組,這樣提取起來就方便了非常多。

(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.代碼

<?phpheader("Content-Type: text/html; charset=utf-8");$url = "http://acm.wust.edu.cn/contestrank.php?cid=1014";$result=file_get_contents($url);$file=fopen("content.php","w");fwrite($file,$result);$file=fopen("content.php","r");$patt_ch=chr(0x80)."-".chr(0xff);// <td>1<td$rankpatt="(<td>)([0-9]+|\*)(<td)";   // part2//<a href=status.php?user_id=team30&cid=1014>team30_姓名</a>$namepatt="(<a[[:space:]]href=status\.php\?

user_id=team[0-9]+&cid=1014>)(\*{0,1}team[0-9]+)(_)([$patt_ch]+)(<\/a>)"; // part2 part4//$namepatt="(team[0-9]+)(_)([$patt_ch]+)"; 也能夠用這個直接匹配"team_姓名"//<a href=status.php?user_id=team30&cid=1014&jresult=4>7</a>$problempatt="(<a[[:space:]]href=status\.php\?user_id=team[0-9]+&cid=1014&jresult=4>)([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"<br>";$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"<br>"; $objPHPExcel->getActiveSheet()->setCellValue(‘B‘.$row, $match[2].$match[4]);}if(preg_match("/$problempatt/",$line,$match)){//print_r($match);//echo$match[2]." ";//echo"<br>";$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.執行結果




網頁抓取資訊(php正則表達式、php操作excel)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.