타 사이트 소스 가져오기

타 사이트 소스 가져오기

QA

타 사이트 소스 가져오기

본문

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);

 

이부분을 일일이 분석해서 가지고오는거 현실적으로 어렵다고 보는 부분이 많습니다. 

크롤링 툴을 사용하셔서 다시 깨지거나 안나오는 부분은 별도로 분석해서 가지고 오시는 방법으로 하시는걸 추천드립니다.

 

그리고 문자셋이 서로 달라서 깨진다면 이부분도 별도 코딩으로 해서 맞추는것을 추천드립니다.

 

 

https://sir.kr/g5_tip/18291

 

한번 살펴보시고 소스가 제대로 나오지 않으면 파이썬 등으로 셀레니움 크롤링 코드가 필요할 것입니다.

참고로 저는 curl 을 사용하였습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 1,124
QA 내용 검색
filter #html ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT