반응형
홈페이지 파싱에 관한 이야기를 해보려한다.
사내 유지보수용 사이트를 구축중인데 파싱할일이 상당히 많다.
단일 홈페이지 파싱을 할땐 Curl을 아래와 같이 사용했다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php
function GetData($Protocol,$Domain,$Data){
$Curl = curl_init();
curl_setopt ($Curl, CURLOPT_URL,$Protocol."://".$Domain); // 파싱할 Url 주소이다
curl_setopt ($Curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($Curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'); // 서버에 보여줄 UserAgent 정보이다
curl_setopt ($Curl, CURLOPT_SSLVERSION,4); // SSL 버전
curl_setopt ($Curl, CURLOPT_HEADER, 0);
curl_setopt ($Curl, CURLOPT_POST, 1); // 값을 넘겨줄지
curl_setopt ($Curl, CURLOPT_POSTFIELDS, "".$Data.""); // Get방식처럼 데이터를 넘겨준다
curl_setopt ($Curl, CURLOPT_TIMEOUT, 30);
curl_setopt ($Curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($Curl);
return $result;
}
?>
|
cs |
그런데 여러 홈페이지를 파싱하다보니 속도가 너무 느린게 흠이였다
그래서 구글링으로 찾아본 결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<?php
function multi_url( $urls, $timeout = 3 ){
$mh = curl_multi_init();
$conn = array();
foreach( $urls as $i => $url) {
$conn[$i] = curl_init( $url );
curl_setopt( $conn[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt( $conn[$i], CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $conn[$i], CURLOPT_SSL_VERIFYHOST, false );
curl_setopt( $conn[$i], CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
curl_setopt ( $conn[$i], CURLOPT_SSLVERSION,4);
if ( $timeout ){
curl_setopt( $conn[$i], CURLOPT_TIMEOUT, $timeout );
}
curl_multi_add_handle( $mh, $conn[$i] );
}
$health = null;
do {
usleep( 10000 );
$mrc = curl_multi_exec( $mh, $health );
} while( $health > 0 );
$res = array();
foreach( $urls as $i => $url ){
$res[] = curl_multi_getcontent( $conn[$i] );
curl_multi_remove_handle( $mh, $conn[$i] );
}
curl_multi_close($mh);
return $res;
}
?>
|
cs |
해당 소스로 적용결과 적은건에서는 큰 차이는 없으나
약 100개의 사이트를 파싱하는 속도는 엄청난 차이를 가져왔다
100개의 사이트를 파싱하는데 약 15초정도 소요가 되는것으로 보인다
행-복!
반응형
'WEB > Etc' 카테고리의 다른 글
[vue.js] <li> v-for 에러 (0) | 2021.11.01 |
---|---|
[PHP] PHP7 mcrypt_encrypt, openssl_encrypt (0) | 2020.10.22 |
[PHP] 로그인 페이지를 만들어보자 (DB사용) (0) | 2020.10.08 |
댓글