PHP爬取糗事百科首頁糗事_PHP教程

來源:互聯網
上載者:User

PHP爬取糗事百科首頁糗事


突然想擷取一些網上的資料來玩玩,因為有SAE的MySql資料庫,讓它在那獃著沒有什麼卵用!於是就開始用PHP編寫一個爬取糗事百科首頁糗事的小程式,資料都儲存在MySql中,豈不是很好玩!

說幹就幹!首先確定思路

擷取HTML源碼--->解析HTML--->儲存到資料庫

沒有什麼難的

1、建立PHP檔案“getDataToDB.php”,

2、擷取指定URL的HTML源碼

這裡我用的是curl函數,詳細內容參見PHP手冊

代碼為

// 擷取對應連結的HTMLCODEfunction GetHtmlCode($url) {$ch = curl_init (); // 初始化一個cur對象curl_setopt ( $ch, CURLOPT_URL, $url ); // 設定需要抓取的網頁curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); // 設定crul參數,要求結果儲存到字串中還是輸出到螢幕上curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 1000 ); // 設定連結延遲$HtmlCode = curl_exec ( $ch ); // 運行curl,請求網頁return $HtmlCode;}
3、引入第三方檔案’simple_html_dom.php‘來解析HTML

這裡我沒有能力使用Regex,就在網上海搜,終於找到這個,就像Java使用Jsoup(使用Jsoup解析滁州學院官網擷取新聞列表)一樣,具體參見BLOG

代碼如下

function getFmlDataToDB() {$link = mysql_connect ( SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT, SAE_MYSQL_USER, SAE_MYSQL_PASS );// 擷取源碼$html = str_get_html ( GetHtmlCode ( http://www.qiushibaike.com/ ) );if ($link) {mysql_select_db ( SAE_MYSQL_DB, $link );mysql_query ( 'set names utf8' );// class=article block untagged mb15foreach ( $html->find ( 'div[class=article block untagged mb15]' ) as $per ) {$z = null;$t = null;$w = null;$d = null;$p = null;$ds = null;$ps = null;// //作者$author = $per->find ( 'div[class=author]' );if ($author != null) {$a = $author [0]->find ( 'a' );$z = $a [1]->innertext;} else {$z = 'no author';}// 頭像連結if ($author != null) {$icon = $author [0]->find ( 'a' );$t = $icon [0]->src->innertext;} else {$t = '...............';}// 文章內容$content = $per->find ( 'div[class=content]' );$w = $content [0]->innertext;// 點贊數$vote1 = $per->find ( 'div[class=stats]' );$vote2 = $vote1 [0]->find ( 'span[class=stats-vote]' );$vote3 = $vote2 [0]->find ( 'i[class=number]' );$d = $vote3 [0]->innertext;// 評論數$comments1 = $vote1 [0]->find ( 'span[class=stats-comments]' );$comments2 = $comments1 [0]->find ( 'a[class=qiushi_comments]' );$comments3 = $comments2 [0]->find ( 'i[class=number]' );$p = $comments3 [0]->innertext;// 頂 數$up_down = $per->find ( 'div[class=stats-buttons bar clearfix]' );$up_down1 = $up_down [0]->find ( 'ul' );$li = $up_down1 [0]->find ( 'li' );$up = $li [0]->find ( 'span[class=number hidden]' );$ds = $up [0]->innertext;// 拍 數$down = $li [1]->find ( 'span[class=number hidden]' );$ps = $down [0]->innertext;}} else {echo '資料庫連結KO';}}
這個代碼寫的有點糾結,我試了一下不能直接擷取子節點的資料,只能從外層一層一層的剝開解析,如果有新的寫法,我會更新,也請各位看官看看。

4、建立資料庫,將資料插入到資料庫中

這裡我使用的SAE中的MySQL,具體的串連方發參見使用PHP串連SAE中的MySql資料庫

需要注意的就是編碼格式,區要在執行語句前加上這樣一句話

mysql_query ( 'set names utf8' );
核心代碼如下:

$sql = INSERT INTO `app_bmhjqs`.`db_fml` (`id`, `author`, `icon_url`, `content`, `vote`, `comments`, `up`, `down`) VALUES (NULL, '$z', '$t', '$w', '$d', '$p', '$ds', '$ps');;// 解決亂碼mysql_query ( 'set names utf8' );$result = mysql_query ( $sql );

這樣一來,擷取--->解析--->插入就完成了,效果就是運行一次PHP檔案,資料庫就添加了糗事百科首頁上的糗事!我想可不可以寫個定時器,每隔一定時間就運行一次代碼,這一點在java我可以實現,在php我不會,畢竟是個沒長毛的小鳥!百度吧。。。搜到這樣的寫法

// 定時器// ignore_user_abort (); // run script. in background// set_time_limit ( 0 ); // run script. forever// $interval = 30; // do every 15 minutes..// do {// echo date ( 'Y-m-d H:i:s', time () );// echo '寫入資料庫';// //getFmlDataToDB ();// } while ( true );
在檔案裡加上這樣的代碼,正好在學校斷網前,發布到了SAE上,我沒有測試!只能等到第二天來查看結果了!

今天早上,我迫不及待的開啟電腦,開啟SAE資料庫,情況如下:

額滴神!受不鳥了,趕緊把定時器關掉了,寫了個按鈕觸發事件!這樣下去,資料庫會被擠滿的!


http://www.bkjia.com/PHPjc/1004123.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1004123.htmlTechArticlePHP爬取糗事百科首頁糗事 突然想擷取一些網上的資料來玩玩,因為有SAE的MySql資料庫,讓它在那獃著沒有什麼卵用!於是就開始用PHP編寫一...

  • 聯繫我們

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