Analisis dan penyelesaian kepada masalah biasa perangkak PHP
Pengenalan:
Dengan perkembangan pesat Internet, pemerolehan data rangkaian telah menjadi pautan penting dalam pelbagai bidang. Sebagai bahasa skrip yang digunakan secara meluas, PHP mempunyai keupayaan hebat dalam pemerolehan data Salah satu teknologi yang biasa digunakan ialah perangkak. Walau bagaimanapun, dalam proses membangunkan dan menggunakan perangkak PHP, kami sering menghadapi beberapa masalah. Artikel ini akan menganalisis dan memberikan penyelesaian kepada masalah ini dan memberikan contoh kod yang sepadan.
1. Tidak dapat menghuraikan data halaman web sasaran dengan betul
Perihalan masalah: Selepas perangkak memperoleh kandungan halaman web, ia tidak dapat mengekstrak data yang diperlukan atau data yang diekstrak adalah salah.
Penyelesaian:
Contoh kod:
<?php $url = 'http://example.com'; $html = file_get_contents($url); $dom = new DOMDocument; @$dom->loadHTML($html); $xpath = new DOMXPath($dom); $elements = $xpath->query('//div[@class="content"]'); foreach ($elements as $element) { echo $element->nodeValue; } ?>
2. Disekat oleh mekanisme anti-crawler tapak web sasaran
Penerangan masalah: Apabila mengakses tapak web sasaran, perangkak disekat oleh mekanisme anti-crawler tapak web.
Penyelesaian:
Contoh kod:
<?php $url = 'http://example.com'; $opts = [ 'http' => [ 'header' => 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36', 'timeout' => 10, ] ]; $context = stream_context_create($opts); $html = file_get_contents($url, false, $context); echo $html; ?>
3. Memproses kandungan dinamik yang dijana oleh JavaScript
Penerangan masalah: Tapak web sasaran menggunakan JavaScript untuk memuatkan kandungan secara dinamik, yang tidak boleh diperoleh secara langsung daripada kelas perangkak.
Penyelesaian:
Contoh kod:
<?php require 'vendor/autoload.php'; use SpatieBrowsershotBrowsershot; $url = 'http://example.com'; $contents = Browsershot::url($url) ->userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36') ->bodyHtml(); echo $contents; ?>
Kesimpulan:
Apabila membangun dan menggunakan perangkak PHP, kami mungkin menghadapi pelbagai masalah, seperti tidak dapat menghuraikan data halaman web sasaran dengan betul, disekat oleh mekanisme anti-crawler tapak web sasaran, dan memproses kandungan dinamik Dijana JavaScript, dsb. Artikel ini menyediakan contoh kod yang sepadan dengan menganalisis masalah ini dan menyediakan penyelesaian yang sepadan. Saya harap ia akan membantu pembangun perangkak PHP.
Atas ialah kandungan terperinci Analisis dan penyelesaian kepada masalah biasa perangkak PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!