타 사이트 소스 가져오기
본문
A사이트의 소스를 가져오고 싶습니다.
우선
A사이트는 우클릭 소스보기하면 잘 나옵니다.
해본건
curl
fopen("A사이트")
file_get_contents("A사이트")
예를 들어 소스를 가져와서 보면
$source = file_get_contents("https://www.ppomppu.co.kr"); // 파일(소스) 가져오기
echo htmlspecialchars($source); // 아무것도 안나옴
echo $source; // 깨져서 보여짐
$source = file_get_contents("https://sir.kr"); // 파일(소스) 가져오기
echo htmlspecialchars($source); // 잘 보여짐
echo $source; // 깨져서 보여짐
$source = file_get_contents("A사이트"); // 파일(소스) 가져오기
echo htmlspecialchars($source); // 보안문제로 다시 접속하라는 소스만 나옴
echo $source; // 보안문제로 다시 접속하라는 소스만 나옴
위 예를 보면 뽐뿌사이트의 경우는 소스가 가져와 진건지 아닌건지 모르겠고
냑의 경우는 소스(텍스트)는 잘 가져온게 확인되는데
A사이트의 경우도 뭔가 가져오는데 보안문제로 다시 접속하라는 메세지의 코드만 가져와지더군요.
소스보기로 나오는 페이지(텍스느)를 그대로 가져올수 없을까요?
답변 5
인코딩 문제로 인해 나타나는 현상인 경우 다음처럼 고정 인코딩으로 시도해볼수 있습니다.
<?php
const ENCODING_TO = 'UTF-8';
header('Content-Type: text/html; charset=' . ENCODING_TO);
function url_front_source($url) {
$source = file_get_contents($url);
$encoding_from = null;
$charset = null;
if (preg_match('!charset=([^\'"\s]+)!i', $source, $charset) === 1) {
$encoding_from = $charset[1];
}
if (empty($encoding_from) == true) {
$encoding_from = mb_detect_encoding($source);
}
if (empty($encoding_from) == true) {
$encoding_from = 'ASCII';
}
$encoding_from = strtoupper($encoding_from);
$encoding_to = strtoupper(ENCODING_TO);
if ($encoding_from != $encoding_to) {
$source = iconv($encoding_from, $encoding_to, $source);
}
$source = htmlspecialchars($source);
return $source;
}
// echo url_front_source('https://www.ppomppu.co.kr');
echo url_front_source('https://sir.kr');
?>
일반적으로 웹사이트는 웹 스크래핑을 방지하기 위한 다양한 방법을 사용하며, 이러한 방법 중 하나가 User-Agent 또는 Referer 검사일 수 있습니다
User-Agent 를 다음과 같은 형식으로 수정 및 추가를 해보시는 건 어떨까 합니다.
$context = stream_context_create([
'http' => [
'user_agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36',
],
]);
$source = file_get_contents("A사이트", false, $context);
echo htmlspecialchars($source);
!-->
변수가 워낙많아 전문 크롤링 툴을 이용하시는걸 권장해드립니다.
이부분을 일일이 분석해서 가지고오는거 현실적으로 어렵다고 보는 부분이 많습니다.
크롤링 툴을 사용하셔서 다시 깨지거나 안나오는 부분은 별도로 분석해서 가지고 오시는 방법으로 하시는걸 추천드립니다.
그리고 문자셋이 서로 달라서 깨진다면 이부분도 별도 코딩으로 해서 맞추는것을 추천드립니다.
한번 살펴보시고 소스가 제대로 나오지 않으면 파이썬 등으로 셀레니움 크롤링 코드가 필요할 것입니다.
참고로 저는 curl 을 사용하였습니다.