웹 페이지를 크롤링하는 PHP 컬 사용자 정의 가져오기 메소드
웹페이지의 콘텐츠를 가져온 후 get 메소드를 사용하여 해당 콘텐츠를 일치시킬 수 있다고 가정해 보겠습니다.
함수 이름이 get이라고 가정하고 컬을 사용하여 함수를 캡슐화할 수 있습니다. URL을 전달하면 지정된 웹페이지를 요청하고 지정된 웹페이지의 HTML 코드를 반환할 수 있습니다. 코드는 다음과 같습니다.
function get($url) { //初使化curl $ch = curl_init(); //请求的url,由形参传入 curl_setopt($ch, CURLOPT_URL, $url); //将得到的数据返回 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不处理头信息 curl_setopt($ch, CURLOPT_HEADER, 0); //连接超过10秒超时 curl_setopt($ch, CURLOPT_TIMEOUT, 10); //执行curl $output = curl_exec($ch); //关闭资源 curl_close($ch); //返回内容 return $output; }
이제 NetEase에서 목록을 요청하고 제목과 URL을 가져오기 위해 작성한 get 메소드를 사용합니다.
먼저 get 메소드를 사용하여 URL을 전달할 수 있습니다. 이 URL에 해당하는 웹페이지의 HTML을 가져옵니다.
웹사이트 주소는 New Media Observation Network의 뉴스 목록 페이지입니다: http://www.xmtnews.com/events.
빨간색 영역 수집:
1. 빨간색 영역의 html을 가져옵니다.
이 범위는 다음 HTML 코드로 시작합니다.
<section class="ov">
는 다음 코드로 끝납니다.
<div class="hr-10"></div>
preg_match를 사용하여 정규식을 작성하고 이를 일치시켜 가져옵니다. 범위에 대한 빨간색 HTML입니다. 일치하는 HTML을 $area 변수에 할당합니다.
의 일치하는 정규식은 다음과 같습니다.
<section class="ov">(.*?)<div class="hr-10"><\/div>/mis'
2. 빨간색 영역
<에 제목과 제목 URL을 일치시킵니다. 🎜>우리는 모든 제목이 <h3> 태그에 있음을 발견했습니다. preg_match_all을 사용하여 정규식을 작성합니다.preg_match_all('/<h3><a href="(.*?)" title=".*?" class="headers" target="_blank">(.*?)<\/a><\/h3>/mis', $area, $find);url과 내용이 일치하는 내용을 $find에 넣고 $find 배열을 출력하면 일치하는 결과를 볼 수 있습니다. 필요한 경우 반복하여 각 행의 제목과 각 행의 URL을 읽고 표시할 수도 있습니다. 모든 코드 데모는 다음과 같습니다:
<?php $content = get('http://www.xmtnews.com/events'); preg_match('/<section class="ov">(.*?)<div class="hr-10"><\/div>/mis', $content, $match); //将正则匹配到的内容赋值给$area $area = $match[1]; preg_match_all('/<h3><a href="(.*?)" title=".*?" class="headers" target="_blank">(.*?)<\/a><\/h3>/', $area, $find); var_dump($find); function get($url) { //初使化curl $ch = curl_init(); //请求的url,由形参传入 curl_setopt($ch, CURLOPT_URL, $url); //将得到的数据返回 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不处理头信息 curl_setopt($ch, CURLOPT_HEADER, 0); //连接超过10秒超时 curl_setopt($ch, CURLOPT_TIMEOUT, 10); //执行curl $output = curl_exec($ch); //关闭资源 curl_close($ch); //返回内容 return $output; } ?>