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. 赤い範囲の 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; } ?>