이 글은 PHP에서 get_meta_tags(), CURL, user-agent의 사용법을 예시를 통해 분석합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
get_meta_tags() 함수는 웹페이지에서 형식의 태그를 가져오는 데 사용됩니다. 1차원 배열, 이름은 요소 첨자, 콘텐츠는 요소 값, 위 예의 레이블은 배열을 얻을 수 있습니다: array('A'=>'1', 'b'=>' 2'), 기타 태그는 처리되지 않으며, 이 함수는 태그만 처리하며, 이후의 ; 계속 처리됩니다.
User-agent는 서버에서 웹페이지를 요청할 때 브라우저가 제출하는 보이지 않는 헤더 정보의 일부입니다. 헤더 정보는 사용자가 로컬 캐시 디렉터리, 쿠키 등과 같은 여러 정보를 포함하는 배열입니다. -agent는 IE, Chrome, FF 등의 브라우저 유형 선언입니다.
오늘 웹페이지의 태그를 잡아보니 항상 null 값이 나오는데, 웹페이지의 소스코드를 직접 확인하는 것은 정상이라 서버가 판단하도록 설정되어 있는지 궁금합니다. 먼저 get_meta_tags()를 사용하여 로컬 파일을 가져온 다음 로컬 파일에서 얻은 헤더 정보를 파일에 씁니다. 결과는 쉽게 볼 수 있도록 /로 대체됩니다. . 코드는 다음과 같습니다.
배열(
'HTTP_HOST' => '192.168.30.205',
'PATH' => 'C:/Program Files/Common Files/NetSarang;C:/Program Files/NVIDIA Corporation/PhysX/Common;C:/Program Files/Common Files/Microsoft Shared/Windows Live;C:/Program Files /Intel/iCLS 클라이언트/;C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;C:/Windows/System32/WindowsPowerShell/v1.0/;C:/Program Files/Intel / 인텔(R) 관리 엔진 구성 요소/DAL;C:/Program Files/인텔/인텔(R) 관리 엔진 구성 요소/IPT;C:/Program Files/Intel/OpenCL SDK/2.0/bin/x86;C:/Program Files /공통 파일/Thunder Network/KanKan/Codecs;C:/Program Files/QuickTime Alternative/QTSystem;C:/Program Files/Windows Live/Shared;C:/Program Files/QuickTime Alternative/QTSystem/ %JAVA_HOME%/ bin ;%JAVA_HOME%/jre/bin;',
'SystemRoot' => 'C:/Windows',
'COMSPEC' => 'C:/Windows/system32/cmd.exe',
'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',
'WINDIR' => 'C:/Windows',
'SERVER_SIGNATURE' => '',
'SERVER_SOFTWARE' => 'Apache/2.2.11 (Win32) PHP/5.2.8',
'SERVER_NAME' => '192.168.30.205',
'SERVER_ADDR' => '192.168.30.205',
'SERVER_PORT' => '80',
'REMOTE_ADDR' => '192.168.30.205',
'DOCUMENT_ROOT' => 'E:/wamp/www',
'SERVER_ADMIN' => 'admin@admin.com',
'SCRIPT_FILENAME' => 'E:/wamp/www/user-agent.php',
'REMOTE_PORT' => '59479',
'GATEWAY_INTERFACE' => 'CGI/1.1',
'SERVER_PROTOCOL' => 'HTTP/1.0',
'REQUEST_METHOD' => 'GET',
'QUERY_STRING' => '',
'요청_URI' => '/user-agent.php',
'SCRIPT_NAME' => '/user-agent.php',
'PHP_SELF' => '/user-agent.php',
'요청_시간' => 1400747529,
)
당연히 배열에는 HTTP_USER_AGENT 요소가 없습니다. Apache에는 다른 서버로 요청을 보낼 때 UA가 없습니다. 정보를 확인한 후 get_meta_tags() 함수에는 UA를 위조하는 기능이 없으므로 다른 서버만 사용할 수 있습니다. 해결 방법
나중에 CURL을 이용해서 구해서 웹페이지를 얻었는데, 사용하기가 조금 더 번거로웠어요. 먼저 UA를 위조한 뒤, 정규식을 이용해 를 분석했습니다.
위조방법, 코드는 다음과 같습니다.
//cURL 초기화
$curl = 컬_init()
//크롤링에 필요한 URL 설정
컬_setopt($curl, CURLOPT_URL, 'http://localhost/user-agent.php')
//파일 헤더를 브라우저에 출력할지 여부를 설정합니다. 0은 출력하지 않습니다.
컬_setopt($curl, CURLOPT_HEADER, 0)
//UA를 설정합니다. 여기서 브라우저의 UA가 서버로 전달됩니다. 값을 수동으로 지정할 수도 있습니다.
컬_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'])
//결과가 문자열로 반환되거나 화면에 출력되도록 cURL 매개변수를 설정합니다. 0은 화면을 출력하고 연산 결과의 BOOL 값을 반환하고, 1은 문자열을 반환합니다
컬_setopt($curl, CURLOPT_RETURNTRANSFER, 1)
// cURL을 실행하여 웹페이지 요청
$data = 컬_exec($curl)
// URL 요청 닫기
컬_닫기($curl)
// 얻은 데이터 처리
var_dump($data);
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.