ホームページ >バックエンド開発 >PHPチュートリアル >PHP は、「恥ずかしいこと百科事典」のホームページにある恥ずかしいことをクロールします。
PHP が「恥ずかしいこと百科事典」のホームページをクロールします
突然、趣味でオンライン データを取得したいと思いました。SAE の MySql データベースがあり、そこに置いておくのは役に立たないからです。そこで、PHP を使って、恥ずかしいもの百科事典のホームページにある恥ずかしいものをクロールする小さなプログラムを書き始めました。データはすべて MySql に保存されていました。
とにかくやってみよう!まずアイデアを決定します
HTML ソース コードを取得 ---> HTML を解析 ---> データベースに保存
難しいことはありません
1. PHP ファイル「getDataToDB.php」を作成します、
2.指定された URL の HTML ソースコードを取得します
ここでは、curl 関数を使用します。詳しくは、PHP マニュアルを参照してください
コードは
<span style="font-family:Times New Roman;font-size:14px;">// 获取对应链接的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;}</span>3. HTML を解析するためのサードパーティ ファイル 'simple_html_dom.php' を導入します
ここで正規表現を使用する機能があるので、オンラインで検索し、最終的にこれを見つけました。Java が Jsoup を使用するのと同じです (Jsoup を使用してChuzhou University の公式 Web サイトを解析し、ニュース リストを取得します)。詳細については、BLOG
コードは次のとおりです
<span style="font-family:Times New Roman;font-size:14px;">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 mb15" foreach ( $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'; }}</span>このコードは少し複雑に書いてみましたが、データを取得できませんでした。子ノードの外側のレイヤーを直接剥がしてレイヤーごとに解析することしかできませんでした。新しい書き方があれば、見てみましょう。
4. データベースを作成し、データベースにデータを挿入します。
ここでは SAE で MySQL を使用します。具体的な接続方法については、SAE で PHP を使用して MySql データベースに接続します
注意する必要があるのはエンコード形式です。この文は実行文の前に追加する必要があります
コアコードは次のとおりです:
<span style="font-family:Microsoft YaHei;font-size:14px;">mysql_query ( 'set names utf8' );</span>
<span style="font-family:Microsoft YaHei;font-size:14px;"> $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 );</span>このようにして、get--->parse- -->挿入が完了しました。PHP ファイルを 1 回実行すると、恥ずかしいこと百科事典のホームページにある恥ずかしいことがデータベースに追加されます。一定の間隔でコードを実行するタイマーを作成できるかどうかは疑問ですが、Java では実行できますが、PHP では実行できません。結局のところ、私は毛のない鳥なのです。百度。 。 。私はこの書き込みメソッド
を見つけて、学校が切断される直前にこのコードをファイルに追加しました。テストはしていませんでした。結果を確認するには翌日まで待つしかありません。
<span style="font-family:Times New Roman;font-size:14px;">// 定时器// 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 );</span>今朝、待ちきれずにコンピューターの電源を入れ、SAE データベースを開きました。状況は次のとおりです:
なんと!もう我慢できなくなったので、すぐにタイマーをオフにして、イベントをトリガーするボタンを書きました。このままではデータベースが混雑してしまいます。
さて、PHP で恥ずかしいこと百科事典のトップページをクロールするという恥ずかしい作業はこれで完了です
このブログがそう感じたなら役に立ちました。ここをクリックしてください。