Webページをクロールするph...LOGIN

Webページをクロールするphpのcurlカスタムgetメソッド

get メソッドを使用して Web ページのコンテンツを取得した後、対応するコンテンツを照合できるとします。

関数名が get であると仮定して、curl を使用して関数をカプセル化できます。 URL を渡すことで、指定した Web ページをリクエストし、指定した Web ページの 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;
}

ここで、作成した get メソッドを使用して NetEase からリストをリクエストし、タイトルと URL を取得します。

まず get メソッドで URL を渡すことができます。この URL に対応する Web ページの HTML を取得します。

URLはNew Media Observation Networkのニュース一覧ページです: http://www.xmtnews.com/events。

赤い領域を収集します:

1.png

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;
}
?>


次のセクション
<?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; } ?>
コースウェア