>백엔드 개발 >PHP 튜토리얼 >실제 크롤러 연습: PHP를 사용하여 Ctrip 여행 정보 크롤링

실제 크롤러 연습: PHP를 사용하여 Ctrip 여행 정보 크롤링

PHPz
PHPz원래의
2023-06-13 10:26:402412검색

관광이 지속적으로 발전하면서 여행 정보도 매우 풍부해졌습니다. 모든 사람이 보다 포괄적이고 정확한 여행 정보를 쉽게 얻을 수 있도록 당사는 크롤러를 사용하여 여행 웹사이트의 데이터를 크롤링하고 분석하고 처리할 수 있습니다. 이 기사에서는 PHP를 사용하여 Ctrip 여행 정보를 크롤링하는 방법을 소개합니다.

  1. 크롤러 기본

크롤러는 웹사이트를 방문하는 사용자를 시뮬레이션하고 웹사이트에서 데이터를 얻는 자동화된 프로그램입니다. 크롤러는 일반적으로 다음 단계로 나뉩니다.

  1. 요청 시작: 크롤러 프로그램은 대상 웹사이트의 HTML 코드를 얻기 위해 대상 웹사이트에 대한 HTTP 요청을 시작합니다.
  2. HTML 구문 분석: 적절한 구문 분석기를 사용하여 HTML 코드를 구문 분석하고 필요한 데이터를 얻습니다. 일반적인 파서에는 정규식, XPath 및 DOM 파서가 포함됩니다.
  3. 데이터 저장: 후속 분석 및 처리를 위해 획득한 데이터를 파일이나 데이터베이스에 저장합니다.
  4. 대상 웹사이트 분석

크롤러를 작성하기 전에 먼저 대상 웹사이트의 구조와 데이터를 분석해야 합니다. 이 크롤러의 대상 웹사이트는 Ctrip 여행 웹사이트입니다. 웹사이트의 URL 구조와 HTML 코드를 분석하여 요청 방식과 구문 분석 방식을 결정해야 합니다.

2.1 URL 구조 분석

씨트립 여행 웹사이트의 URL 구조는 비교적 간단합니다. 각 여행 상품에는 고유한 ID 번호가 있습니다. 베이징 관광을 예로 들어 보겠습니다. URL은 https://you.ctrip.com/sight/beijing1.html입니다. 그 중 beijing1은 베이징 관광청의 ID 번호를 나타냅니다.

2.2 HTML 코드 분석

Chrome 브라우저의 개발자 도구를 사용하여 웹페이지의 HTML 코드를 보면 페이지의 여행 정보가 "list_mod2" 클래스의 div에 있음을 알 수 있습니다. 이 div에는 상품명, 가격, 리뷰 등 각 여행 상품에 대한 자세한 정보가 포함되어 있습니다. 크롤러 프로그램에서는 이 정보를 구문 분석하기 위해 PHP의 DOM 파서를 사용해야 합니다.

  1. 크롤러 프로그램 작성

이제 대상 웹사이트의 URL 구조와 HTML 코드를 이해했으므로 여행 정보를 얻는 크롤러 프로그램을 작성할 수 있습니다.

3.1 HTTP 요청 시작

먼저 PHP의 cURL 라이브러리를 사용하여 대상 웹사이트에 대한 HTTP 요청을 시작하고 대상 웹사이트의 HTML 코드를 가져와야 합니다. 코드에서는 ID=1부터 시작하는 루프를 사용하여 각 여행 상품의 세부 정보를 순차적으로 가져옵니다.

//爬取ID号从1到n的旅游产品的详细信息
for($i=1;$i<=$n;$i++){
    $url = "https://you.ctrip.com/sight/beijing$i.html"; //目标网站URL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $html = curl_exec($ch);
    curl_close($ch);
    }

3.2 HTML 코드 구문 분석

다음으로 PHP의 DOM 구문 분석기를 사용하여 대상 웹사이트의 HTML 코드를 구문 분석하고 필요한 여행 상품 정보를 얻습니다. 코드에서는 XPath 표현식을 사용하여 "list_mod2" 클래스가 있는 div를 선택하고 제품 이름, 가격, 평가 및 기타 정보를 얻습니다.

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$list_mod2 = $xpath->query('//*[@class="list_mod2"]'); //选择class为"list_mod2"的div
foreach($list_mod2 as $mod){
    $modImg = $xpath->query('a/img/@src', $mod)->item(0)->nodeValue; //获取产品图片URL
    $modTitle = $xpath->query('div/h2/a', $mod)->item(0)->nodeValue; //获取产品名称
    $modContent = $xpath->query('div/div/div/p/@title', $mod)->item(0)->nodeValue; //获取产品简介
    $modPrice = $xpath->query('div/div/span/em', $mod)->item(0)->nodeValue; //获取产品价格
    $modComment = $xpath->query('div/div/div/div/span[1]', $mod)->item(0)->nodeValue; //获取产品评价分数
    $modCommentNum = $xpath->query('div/div/div/div/span[2]', $mod)->item(0)->nodeValue; //获取产品评价人数
}

3.3 데이터 저장

마지막으로 획득한 여행상품 정보를 데이터베이스에 저장합니다. 코드에서는 PHP의 PDO 확장을 사용하여 데이터베이스에 연결하고 얻은 제품 정보를 "product_info"라는 데이터베이스 테이블에 삽입합니다.

//连接数据库
$dsn = 'mysql:host=localhost;port=3306;dbname=test;charset=utf8';
$username = 'root';
$password = '123456';
$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$dbh = new PDO($dsn, $username, $password, $options);

//将获取到的产品信息插入到数据库
$stmt = $dbh->prepare("INSERT INTO product_info(img_url, title, content, price, comment_score, comment_num) VALUES(?, ?, ?, ?, ?, ?)");
$stmt->bindParam(1, $modImg);
$stmt->bindParam(2, $modTitle);
$stmt->bindParam(3, $modContent);
$stmt->bindParam(4, $modPrice);
$stmt->bindParam(5, $modComment);
$stmt->bindParam(6, $modCommentNum);
$stmt->execute();
  1. 요약

PHP를 사용하여 크롤러 프로그램을 작성하면 씨트립 여행사이트의 여행상품 정보를 쉽게 크롤링하여 데이터베이스에 저장할 수 있습니다. 실제 개발에서는 멀티스레딩, IP 프록시 및 기타 기술을 사용하여 크롤러 프로그램의 효율성과 안정성을 향상시킬 수도 있습니다. 그러나 크롤러 프로그램을 사용할 때에는 침해 및 남용을 방지하기 위해 대상 웹사이트의 저작권 및 개인 정보 보호 정책을 존중해야 합니다.

위 내용은 실제 크롤러 연습: PHP를 사용하여 Ctrip 여행 정보 크롤링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.