php curl custom get kaedah untuk merangkak halaman web
Andaikan kita menggunakan kaedah dapatkan untuk meminta halaman web Selepas mendapat kandungan halaman web, kita boleh memadankan kandungan yang sepadan.
Kita boleh menggunakan curl untuk merangkum fungsi, dengan mengandaikan nama fungsi adalah get. Dengan memasukkan URL, anda boleh meminta halaman web yang ditentukan dan mengembalikan kod HTML halaman web yang ditentukan. Kodnya adalah seperti berikut:
function get($url) { //初使化curl $ch = curl_init(); //請求的url,由形參傳入 curl_setopt($ch, CURLOPT_URL, $url); //將得到的數(shù)據(jù)返回 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不處理頭信息 curl_setopt($ch, CURLOPT_HEADER, 0); //連接超過10秒超時 curl_setopt($ch, CURLOPT_TIMEOUT, 10); //執(zhí)行curl $output = curl_exec($ch); //關(guān)閉資源 curl_close($ch); //返回內(nèi)容 return $output; }
Kami kini menggunakan kaedah dapatkan yang kami tulis untuk meminta senarai daripada NetEase dan ambil tajuk dan url.
Kita boleh menghantar URL terlebih dahulu menggunakan kaedah get. Dapatkan html halaman web yang sepadan dengan URL ini.
Alamat tapak web ialah halaman senarai berita bagi Rangkaian Pemerhatian Media Baharu: http://www.xmtnews.com/events.
Kumpulkan kawasan merah:
1 Dapatkan html kawasan merah
Julat ini bermula dengan kod HTML berikut:
<section class="ov">
berakhir dengan kod berikut:
<div class="hr-10"></div>
Gunakan preg_match untuk menulis ungkapan biasa dan memadankannya untuk mendapatkan HTML merah untuk julat. Berikan HTML yang dipadankan kepada pembolehubah $kawasan. Ungkapan biasa padanan
adalah seperti berikut:
<section class="ov">(.*?)<div class="hr-10"><\/div>/mis'
2. Padankan tajuk dan URL tajuk di kawasan merah
Kami Mendapati bahawa semua tajuk berada dalam teg <h3> Kami menggunakan preg_match_all untuk menulis ungkapan ungkapan biasa.
preg_match_all('/<h3><a href="(.*?)" title=".*?" class="headers" target="_blank">(.*?)<\/a><\/h3>/mis', $area, $find);
Letakkan kandungan yang sepadan dengan url dan kandungan ke dalam $find Cetak tatasusunan $find untuk melihat hasil yang sepadan.
Jika perlu, anda juga boleh gelung untuk membaca dan memaparkan tajuk setiap baris dan URL setiap baris.
Semua demonstrasi kod adalah seperti berikut:
<?php $content = get('http://www.xmtnews.com/events'); preg_match('/<section class="ov">(.*?)<div class="hr-10"><\/div>/mis', $content, $match); //將正則匹配到的內(nèi)容賦值給$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); //將得到的數(shù)據(jù)返回 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不處理頭信息 curl_setopt($ch, CURLOPT_HEADER, 0); //連接超過10秒超時 curl_setopt($ch, CURLOPT_TIMEOUT, 10); //執(zhí)行curl $output = curl_exec($ch); //關(guān)閉資源 curl_close($ch); //返回內(nèi)容 return $output; } ?>