Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perangkak PHP praktikal untuk merangkak Sina News

Perangkak PHP praktikal untuk merangkak Sina News

WBOY
WBOYasal
2023-06-13 14:55:121023semak imbas

Dengan perkembangan Internet, maklumat telah meletup, dan berita menyumbang bahagian tertinggi maklumat. Untuk mendapatkan maklumat berita terkini dan paling berharga dengan lebih pantas, orang ramai biasanya melayari maklumat terkini di laman web berita. Walau bagaimanapun, jumlah berita yang boleh dibaca oleh seseorang setiap hari adalah terhad, jadi kami memerlukan alat yang cekap untuk merangkak maklumat berita. Artikel ini akan berkongsi pengalaman praktikal merangkak Sina News menggunakan program perangkak yang dilaksanakan dalam PHP.

1. Pengetahuan asas tentang perangkak

Perangkak ialah atur cara automatik untuk mensimulasikan penyemak imbas membuat permintaan, menghuraikan data halaman yang dikembalikan, mengekstrak maklumat yang diperlukan dan menyimpan atau memuat turun ia. Bahasa pengaturcaraan perangkak biasa termasuk Python, Java, JavaScript, dll. Artikel ini memilih bahasa PHP untuk menulis program perangkak kerana bahasa PHP sangat sesuai untuk pembangunan web, dan ia mempunyai banyak fungsi permintaan HTTP yang berkuasa dan perpustakaan penghuraian DOM, yang boleh melengkapkan rangkak halaman web dan pengekstrakan maklumat dengan mudah.

2. Tulis program perangkak

1 Tentukan tapak web sasaran

Sebelum anda mula menulis program perangkak, anda perlu terlebih dahulu menentukan tapak web sasaran yang ingin anda rangkak . Artikel ini memilih laman web berita Sina. Pertama, kita perlu memahami struktur halaman web dan kaedah penyimpanan data laman web tersebut.

2. Simulasikan pelayar untuk membuat permintaan

Untuk berjaya mendapatkan data tapak web sasaran, anda perlu mensimulasikan penyemak imbas untuk membuat permintaan ke tapak web sasaran. Dalam PHP, kita boleh menggunakan pustaka fungsi cURL untuk melengkapkan proses ini. Contohnya:

$url = 'http://news.sina.com.cn/';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html = curl_exec($ch);
curl_close($ch);

Kod ini menggunakan cURL untuk mengeluarkan permintaan GET dan alamat permintaan ialah halaman utama Sina News. Kita dapat melihat bahawa beberapa parameter digunakan dalam permintaan, seperti: CURLOPT_RETURNTRANSFER digunakan untuk memberitahu fungsi cURL untuk mengembalikan hasil permintaan dan bukannya mengeluarkannya terus ke penyemak imbas CURLOPT_USERAGENT digunakan untuk mensimulasikan identiti pelayar dan biarkan sasaran Tapak web tidak akan melindungi daripada perangkak kami CURLOPT_FOLLOWLOCATION digunakan untuk menjejak ubah hala secara automatik supaya kod sumber halaman yang lengkap boleh diperolehi, dsb.

3. Menghuraikan data halaman

Selepas berjaya mendapatkan kod sumber halaman, kami perlu menghuraikan data dan mengekstrak maklumat yang diperlukan. Proses penghuraian boleh dibahagikan kepada dua langkah: pertama, tukar kod HTML kepada objek DOM, yang mencerminkan hubungan hierarki struktur dokumen kemudian, tapis maklumat yang diperlukan daripada objek DOM mengikut peraturan sintaks yang sepadan;

Dalam PHP, kami boleh menghuraikan kod HTML dan XML dengan bantuan kelas DOMDocument dan kelas SimpleXMLElement. Sebagai contoh, dalam coretan kod berikut, kami mengeluarkan tajuk berita, pautan dan ringkasan daripada halaman utama Berita Sina:

//创建 DOM 对象
$dom = new DOMDocument();

//HTML 代码转 DOM 对象
$dom->loadHTML($html);

//获取所有新闻列表
$newsList = $dom->getElementById('syncad_1');

//遍历新闻列表并提取信息
foreach ($newsList->getElementsByTagName('li') as $item) {
    
    //提取标题链接
    $linkNode = $item->getElementsByTagName('a')->item(0);
    $link = $linkNode->getAttribute('href');
    
    //提取标题
    $titleNode = $linkNode->getElementsByTagName('span')->item(0);
    $title = $titleNode->nodeValue;
    
    //提取摘要
    $summaryNode = $item->getElementsByTagName('p')->item(0);
    $summary = $summaryNode->nodeValue;
    
    //保存数据到数组中
    $data[] = [
        'title' => $title,
        'link' => $link,
        'summary' => $summary
    ];
}

Dalam contoh kod di atas, kami mula-mula menggunakan kaedah getElementById untuk mendapatkan semua senarai berita , kemudian gunakan kaedah getElementsByTagName untuk menapis elemen li dan melintasi senarai untuk mengekstrak maklumat yang diperlukan. Antaranya, kami menggunakan kaedah getAttribute dan kaedah nodeValue untuk mengekstrak nilai atribut dan kandungan teks.

4. Simpan data

Selepas berjaya mengekstrak maklumat yang diperlukan, kami perlu menyimpannya ke fail atau pangkalan data setempat untuk kegunaan seterusnya. Dalam artikel ini, kami menggunakan pangkalan data MySQL untuk menyimpan data, dan menggunakan sambungan PDO yang disertakan dengan PHP untuk menyambung dan beroperasi dengan pangkalan data. Berikut ialah contoh kod untuk menyimpan data ke dalam pangkalan data MySQL:

//数据库连接
$dsn = 'mysql:host=127.0.0.1;dbname=news;charset=utf8';
$username = 'root';
$password = '123456';
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
$pdo = new PDO($dsn, $username, $password, $options);

//保存数据到数据库中
$stmt = $pdo->prepare("INSERT INTO news (title, link, summary) VALUES (:title, :link, :summary)");
foreach ($data as $item) {
    $stmt->bindParam(':title', $item['title']);
    $stmt->bindParam(':link', $item['link']);
    $stmt->bindParam(':summary', $item['summary']);
    $stmt->execute();
}

Dalam kod di atas, kami mula-mula mencipta jadual bernama berita untuk menyimpan tajuk, pautan dan maklumat ringkasan berita. Selepas itu, gunakan perpustakaan fungsi PDO untuk melaksanakan langkah-langkah seperti sambungan, prapemprosesan, pengikatan parameter dan pelaksanaan pangkalan data MySQL. Di sini kami menggunakan kaedah bindParam untuk mengikat parameter dan melaksanakan pernyataan SQL.

3. Ringkasan

Artikel ini memperkenalkan cara menggunakan bahasa PHP untuk menulis program perangkak untuk merangkak tapak web berita Sina sebagai contoh. Dalam proses ini, kod contoh termasuk langkah-langkah seperti merangkak sasaran, membuat permintaan, menghuraikan data dan menyimpan data. Dalam amalan, anda mungkin juga perlu mempertimbangkan beberapa langkah anti-rangkak tapak web, pembersihan data, rangkak berbilang benang dan isu lain, tetapi ini adalah teknologi perangkak yang lebih maju dan boleh dikaji secara mendalam dalam kajian akan datang.

Atas ialah kandungan terperinci Perangkak PHP praktikal untuk merangkak Sina News. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn