경량급 가정용 파충류
파충류 의 구조: 파충류 의 원 리 는 간단 하 다. 다운로드 한 페이지 를 분석 하고 그 중의 연결 을 찾 은 다음 에 이 링크 를 다운로드 한 다음 에 분석 하고 다운로드 하 는 것 이다.데이터 저장 에 있어 데이터 베 이 스 는 검색 하기에 편리 하고 언어 를 개발 할 수 있 습 니 다. 정규 표현 식 만 지원 하면 됩 니 다. 데이터 베 이 스 는 my sql 을 선 택 했 기 때문에 스 크 립 트 를 개발 할 때 저 는 phop 을 선 택 했 습 니 다.perl 호 환 정규 표현 식 을 지원 합 니 다. my sql 연결 이 편리 하고 http 다운 로드 를 지원 하 며 windows 시스템 과 Liux 시스템 을 배치 할 수 있 습 니 다.
정규 표현 식: 정규 표현 식 은 문 자 를 처리 하 는 기본 도구 입 니 다. html 의 링크 와 그림 을 꺼 내 려 면 정규 표현 식 은 다음 과 같 습 니 다.
"#]+href=(['\"])(.+)\\1#isU" 처리 링크 "#] + src = ([\ "]) (. +) \ \ \ \ 1 \ # isU 처리 그림
기타 질문: 파충 류 를 쓰 는 데 있어 서 주의해 야 할 문 제 는 이미 다운로드 한 url 에 대해 서 는 중복 다운로드 할 수 없 으 며, 일부 웹 페이지 의 링크 는 순환 로 를 형성 하기 때문에 이 문 제 를 처리 해 야 합 니 다. 제 처리 방법 은 이미 처 리 된 url 의 MD5 값 을 계산 하고 데이터 베 이 스 를 저장 하 는 것 입 니 다. 그러면 이미 다운로드 되 었 는 지 확인 할 수 있 습 니 다. 물론 더 좋 은 알고리즘 도 있 습 니 다. 관심 이 있다 면.인터넷 에서 찾 아 보 세 요.
관련 프로 토 콜: 파충류 도 자신의 협의 가 있 습 니 다. robots. txt 파일 은 사이트 가 옮 겨 다 닐 수 있 도록 정 의 했 지만 제 시간 이 제한 되 어 이 기능 을 실현 하지 못 했 습 니 다.
기타 설명: php 지원 클래스 프로 그래 밍, 내 가 쓴 파충류 의 주요 클래스. 1. url 처리 웹 site info, 주로 url 처리, 도 메 인 이름 분석 등. 2. 데이터베이스 조작 mysql insert. php, 데이터베이스 와 관련 된 조작 처리. 3. 역사 기록 처리, 처 리 된 url 을 기록 합 니 다. 4. 파충류.
존재 하 는 문제점 과 부족
이 파충 류 는 작은 데 이 터 량 의 경우 잘 작 동 하지만 빅 데 이 터 량 의 경우 역사 기록 처리 류 의 효율 이 높 지 않 습 니 다. 데이터 베이스 구조 에서 관련 필드 를 색인 하여 속도 가 향상 되 었 으 나 계속 읽 어야 합 니 다. phop 자체 의 array 와 관련 이 있 을 수 있 습 니 다. 한 번 에 10 만 개의 역사 기록 을 불 러 오 면속도 가 매우 느리다. 다 중 스 레 드 는 지원 되 지 않 습 니 다. 매번 url 만 처리 할 수 있 습 니 다. php 실행 자체 에 메모리 사용량 제한 이 있 습 니 다. 한 번 은 깊이 가 20 인 페이지 를 캡 처 할 때 메모리 소 진 프로그램 이 죽 었 습 니 다.
아래 url 은 원본 다운로드 입 니 다.
http://www.cppblog.com/Files/hdqqq/net_spider.rar
사용 할 때 mysql 에 net spider 데이터 베 이 스 를 만 든 다음 db. sql 로 관련 표를 만 듭 니 다. config. php 에 mysql 사용자 이름 암 호 를 설정 합 니 다. 마지막 으로 php - f spider. php 깊이 (수치) url 일 을 시작 할 수 있다.
php -f spider.php 20 http://news.sina.com.cn
지금 은 파충류 가 되 는 것 이 그리 복잡 하지 않다 는 것 을 느 꼈 습 니 다. 어 려 운 것 은 데이터 의 저장 과 검색 입 니 다. 제 현재 데이터 베 이 스 는 가장 큰 데이터 시트 가 15G 입 니 다. 이 데 이 터 를 처리 하려 고 하고 있 습 니 다. my sql 에서 조 회 를 하 는 것 은 이미 힘 에 부 치 는 것 같 습 니 다. 이 점 에서 구 글 에 탄복 합 니 다.
<?php
#
function curl_get($url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HEADER,1);
$result=curl_exec($ch);
$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);
if($code!='404' && $result){
return $result;
}
curl_close($ch);
}
# url
function get_page_urls($spider_page_result,$base_url){
$get_url_result=preg_match_all("/<[a|A].*?href=[\'\"]{0,1}([^>\'\"\]*).*?>/",$spider_page_result,$out);
if($get_url_result){
return $out[1];
}else{
return;
}
}
#
function xdtojd($base_url,$url_list){
if(is_array($url_list)){
foreach($url_list as $url_item){
if(preg_match("/^(http:\/\/|https:\/\/|javascript:)/",$url_item)){
$result_url_list[]=$url_item;
}else {
if(preg_match("/^\//",$url_item)){
$real_url = $base_url.$url_item;
}else{
$real_url = $base_url."/".$url_item;
}
#$real_url = 'http://www.sumpay.cn/'.$url_item;
$result_url_list[] = $real_url;
}
}
return $result_url_list;
}else{
return;
}
}
# url
function other_site_url_del($jd_url_list,$url_base){
if(is_array($jd_url_list)){
foreach($jd_url_list as $all_url){
echo $all_url;
if(strpos($all_url,$url_base)===0){
$all_url_list[]=$all_url;
}
}
return $all_url_list;
}else{
return;
}
}
# URL
function url_same_del($array_url){
if(is_array($array_url)){
$insert_url=array();
$pizza=file_get_contents("/tmp/url.txt");
if($pizza){
$pizza=explode("\r
",$pizza);
foreach($array_url as $array_value_url){
if(!in_array($array_value_url,$pizza)){
$insert_url[]=$array_value_url;
}
}
if($insert_url){
foreach($insert_url as $key => $insert_url_value){
#
$update_insert_url=preg_replace('/=[^&]*/','=leesec',$insert_url_value);
foreach($pizza as $pizza_value){
$update_pizza_value=preg_replace('/=[^&]*/','=leesec',$pizza_value);
if($update_insert_url==$update_pizza_value){
unset($insert_url[$key]);
continue;
}
}
}
}
}else{
$insert_url=array();
$insert_new_url=array();
$insert_url=$array_url;
foreach($insert_url as $insert_url_value){
$update_insert_url=preg_replace('/=[^&]*/','=leesec',$insert_url_value);
$insert_new_url[]=$update_insert_url;
}
$insert_new_url=array_unique($insert_new_url);
foreach($insert_new_url as $key => $insert_new_url_val){
$insert_url_bf[]=$insert_url[$key];
}
$insert_url=$insert_url_bf;
}
return $insert_url;
}else{
return;
}
}
$current_url=$argv[1];
$fp_puts = fopen("/tmp/url.txt","ab");// url
$fp_gets = fopen("/tmp/url.txt","r");// url
$url_base_url=parse_url($current_url);
if($url_base_url['scheme']==""){
$url_base="http://".$url_base_url['host'];
}else{
$url_base=$url_base_url['scheme']."://".$url_base_url['host'];
}
do{
$spider_page_result=curl_get($current_url);
#var_dump($spider_page_result);
$url_list=get_page_urls($spider_page_result,$url_base);
#var_dump($url_list);
if(!$url_list){
continue;
}
$jd_url_list=xdtojd($url_base,$url_list);
#var_dump($jd_url_list);
$result_url_arr=other_site_url_del($jd_url_list,$url_base);
var_dump($result_url_arr);
$result_url_arr=url_same_del($result_url_arr);
#var_dump($result_url_arr);
if(is_array($result_url_arr)){
$result_url_arr=array_unique($result_url_arr);
foreach($result_url_arr as $new_url) {
fputs($fp_puts,$new_url."\r
");
}
}
}while ($current_url = fgets($fp_gets,1024));// url
preg_match_all("/<a[^>]+href=[\"']([^\"']+)[\"'][^>]+>/",$spider_page_result,$out);
# echo a href
#var_dump($out[1]);
?>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.