2023. 4. 7. 10:39ㆍ코딩
<?php
// 크롤링할 URL
$url = "https://www.example.com/";
// CURL 초기화
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$html = curl_exec($ch);
curl_close($ch);
// HTML 파싱
$dom = new DOMDocument();
@$dom->loadHTML($html);
// 원하는 요소 선택
$title = $dom->getElementsByTagName("title")->item(0)->nodeValue;
$paragraphs = $dom->getElementsByTagName("p");
$firstParagraph = $paragraphs->item(0)->nodeValue;
// 결과 출력
echo "Title: " . $title . "<br>";
echo "First Paragraph: " . $firstParagraph . "<br>";
?>
먼저, 크롤링할 URL을 $url 변수에 저장합니다.
이후, CURL을 초기화하고 $url 변수에 저장된 URL을 이용하여 웹 페이지에 접속합니다. CURLOPT_RETURNTRANSFER 옵션은 CURL 함수의 반환 값을 변수에 저장하기 위한 것이며, CURLOPT_CONNECTTIMEOUT 옵션은 접속 시간 초과 시간을 설정합니다. 이후, $html 변수에 CURL 함수의 반환 값을 할당하고, CURL을 종료합니다.
다음으로, DOMDocument 클래스를 이용하여 $html 변수에 저장된 HTML 코드를 파싱합니다. $dom 변수에 loadHTML() 메소드를 이용하여 HTML 코드를 로드합니다.
그리고 원하는 요소를 선택하기 위해, getElementsByTagName() 메소드를 이용하여 title 요소와 p 요소를 선택합니다. 선택된 요소 중 첫 번째 요소를 $title 변수와 $firstParagraph 변수에 저장하고, 결과를 출력합니다.
위 코드에서 @는 PHP에서 에러를 무시하는 오류 제어 연산자입니다. loadHTML() 함수는 유효하지 않은 HTML 코드가 전달되면 에러를 발생시키기 때문에, @를 붙여 에러를 무시하도록 합니다. 하지만 이 방법은 권장되지 않습니다. 대신, 유효한 HTML 코드를 사용하는 것이 좋습니다.
아래 예제는 PHP를 사용하여 HTML에서 특정 클래스 이름을 가진 div 태그를 찾아 크롤링하는 방법입니다
<?php
// 크롤링할 URL
$url = "https://www.example.com/";
// CURL 초기화
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$html = curl_exec($ch);
curl_close($ch);
// HTML 파싱
$dom = new DOMDocument();
@$dom->loadHTML($html);
// 원하는 요소 선택
$classname = "example-class";
$finder = new DomXPath($dom);
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
foreach ($nodes as $node) {
// 요소 내용 출력
echo $node->nodeValue . "<br>";
}
?>
DomXPath 클래스를 이용하여 특정 클래스 이름을 가진 div 태그를 찾습니다. $classname 변수에는 찾을 클래스 이름을 할당하고, query() 메소드를 이용하여 클래스 이름이 $classname인 div 태그를 찾습니다.
마지막으로, foreach 루프를 이용하여 찾은 모든 div 태그의 내용을 출력합니다. 이때, $node->nodeValue를 이용하여 div 태그의 내용을 가져옵니다.
'코딩' 카테고리의 다른 글
PHP에서 MySQL 데이터베이스에 연결하려면 MySQLi (2) | 2023.04.07 |
---|---|
jQuery에서 data 메소드를 사용하여 요소에 저장된 데이터 객체 (2) | 2023.04.07 |
jquery div append 소스 (1) | 2023.04.07 |
jquery 천단위 숫자 적용하기. (1) | 2023.04.07 |
jQuery를 사용하여 로딩 화면을 표시하고, AJAX 요청을 보내고 응답을 받는 동안 로딩 화면을 유지하는 코드 예시입니다. (3) | 2023.04.07 |