目次
ディスカッション (解決策) に返信
ホームページ バックエンド開発 PHPチュートリアル PHP で大量の Web ページを収集する効率的かつ実行可能な方法を見つけるのを手伝ってください。

PHP で大量の Web ページを収集する効率的かつ実行可能な方法を見つけるのを手伝ってください。

Jun 23, 2016 pm 01:50 PM
php 探す 方法 ウェブページ

PHP の CURL を使用して、Xiami.com から音楽情報を収集したいと考えています。
しかし、それは非常に遅く、50 個ほど収集すると、Web ページが 2 回目に実行されると収集できなくなります。収集は許可されていないため、基本的にデータの収集は非常に遅くなります。
この種のビッグデータはどのように収集すればよいでしょうか?
私のコードに問題がある可能性もあります。
以下はコードの一部です。

$j=0;	//起始ID	$id = 200000;	//采集1000条	//保存采集的数据	$data = array();	while($j<1000){		$url = 'http://www.xiami.com/song/'.($id++);		$ch = curl_init();		$status = curl_getinfo($ch);		///$status['redirect_url'] ;// 跳转到的新地址		$header[]='Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';		$header[]='Accept-Encoding:gzip,deflate,sdch';		$header[]='Accept-Language:zh-CN,zh;q=0.8';		$header[]='Cache-Control:max-age=0';		$header[]='Connection:keep-alive';		$header[]='Cookie:_unsign_token=a35437bd35c221c09a0e6f564e17c225; __gads=ID=7fcc242f6fd63d77:T=1408774454:S=ALNI_Mae8MH6vL5z6q4NlGYzyqgD4jHeEg; bdshare_firstime=1408774454639; _xiamitoken=3541aab48832ba3ceb089de7f39b9b0f; pnm_cku822=211n%2BqZ9mgNqgJnCG0Zu8%2BzyLTPuc%2B7wbrff98%3D%7CnOiH84T3jPCG%2FIr%2BiPOG8lI%3D%7CneiHGXz6UeRW5k4rRCFXIkcoTdd7ym3fZdO2FrY%3D%7Cmu6b9JHlkuGa5pDqnOie5ZDkmeqb4ZTule6V7ZjjlOib7JrmkvdX%7Cm%2B%2BT%2FGIUew96DXsUYBd4HawbrTOXOVI4iyOLIYUqT%2B9P%7CmO6BH2wDcB9rHGsYdwRrH2gfbAN%2FDH8QZBNkF3gDeQqqCg%3D%3D%7Cme6d7oHyneiH84Twn%2BmR64TzUw%3D%3D; CNZZDATA921634=cnzz_eid%3D1437506062-1408774274-%26ntime%3D1408937320; CNZZDATA2629111=cnzz_eid%3D2021816723-1408774274-%26ntime%3D1408937320; isg=075E6FBDF77039CEB63A1BA239420244';		$header[]='Host:www.xiami.com';		$header[]='User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1653.0 Safari/537.36';		curl_setopt($ch, CURLOPT_URL, $url);	//要访问的地址		curl_setopt($ch, CURLOPT_HTTPHEADER, $header);	//设置http头		curl_setopt($ch, CURLOPT_HEADER, 0);	//显示返回的Header区域内容		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);	//获取的信息以文件流的形式返回		curl_setopt($ch, CURLOPT_TIMEOUT, 20);	//设置超时限制防止死循环		$content = curl_exec($ch);	//执行操作		$curl_errno = curl_errno($ch);		$curl_error = curl_error($ch);		curl_close($ch);	//关闭CURL会话		preg_match('/name="description"\s+content="《(.+)》演唱者(.+),所属专辑《(.+)》/', $content,$matches);		//如果歌曲名字为空,跳过		if(empty($matches[1]) || trim($matches[1]) == ''){			continue;		}				//匹配出的数据		$data[$id]['song'] = empty($matches[1])?' ':$matches[1];		$data[$id]['songer'] = empty($matches[2])?' ':$matches[2];		$data[$id]['album'] = empty($matches[3])?' ':$matches[3];				preg_match('/album\/(\d+)/', $content,$matches);		$data[$id]['albumId'] = empty($matches[1])?0:$matches[1];		preg_match('/\/artist\/(\d+)/', $content,$matches);		$data[$id]['songerId'] = empty($matches[1])?0:$matches[1];		//歌词<div class="lrc_main">		preg_match('/<div class="lrc_main">(.*)<\/div>/Us', $content,$matches);		$data[$id]['lrc'] =  empty($matches[1])?' ':addslashes($matches[1]);		//分享 分享<em>(3269)</em>		preg_match('/分享<em>\((\d+)\)<\/em>/Us', $content,$matches);		$data[$id]['share'] =  empty($matches[1]) ? 0:$matches[1];		//评论次数 <p class="wall_list_count"><span>920		preg_match('/<p class="wall_list_count"><span>(\d+)<\/span>/Us', $content,$matches);		$data[$id]['comment_count'] =  empty($matches[1])?0:$matches[1];		//入库操作		//print_r($data);		//_____________________________		$j++;		usleep(3000);	}
ログイン後にコピー





ディスカッション (解決策) に返信

親愛なる、スヌーピー クラスを使用してください

親愛なる、Ruby または Go を使用してください

冗談です、走りたくても、まだ間に合うでしょうコマンド行パターン 実行...

xiami.com サーバーには制限があり、収集が禁止されているはずです

1. URL リクエストごとに 10 ~ 20 ダースのみを収集し、その後ジャンプして収集を続けることができます。ページのタイムアウトも防ぎます。仮想マシン上で実行して CPU を長時間使用すると、プロセスが強制終了される可能性があります。

2. ヘッダーのユーザー エージェントと Cookie を変更することをお勧めします。各 URL リクエストの。

3. それでもダメなら機関車を使ってみてください!

4. 電車が動かないなら、この駅は諦めてください!

同じページを実行するには foreach をループに分割します。
ブラウザまたは cronrab が完了後に毎回 http://localhost/caiji.php?num=1 を実行するとき、 $_GET[' の後に、curl は同じスクリプトを繰り返し実行します。 num']==1000、終了し、curl は実行されなくなります。

れーい

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

See all articles