ホームページ  >  記事  >  バックエンド開発  >  PHP は、「恥ずかしいこと百科事典」のホームページにある恥ずかしいことをクロールします。

PHP は、「恥ずかしいこと百科事典」のホームページにある恥ずかしいことをクロールします。

WBOY
WBOYオリジナル
2016-06-13 12:20:041374ブラウズ

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 で恥ずかしいこと百科事典のトップページをクロールするという恥ずかしい作業はこれで完了です

このブログがそう感じたなら役に立ちました。ここをクリックしてください。




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。