Zhihu ialah komuniti perkongsian pengetahuan yang sangat popular. Ramai pengguna telah menyumbangkan sejumlah besar soalan dan jawapan berkualiti tinggi Bagi mereka yang belajar dan bekerja, kandungan ini sangat membantu untuk menyelesaikan masalah dan meluaskan pandangan mereka. Jika anda ingin mengatur dan menggunakan kandungan ini, anda perlu menggunakan pengikis untuk mendapatkan data yang berkaitan. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menulis program untuk merangkak soalan dan jawapan Zhihu.
Tajuk soalan
Perihalan soalan
Bilangan pengikut, pandangan dan jawapan untuk soalan
Tag soalan
Soalan Berkaitan
Soalan tentang Zhihu mempunyai ciri yang sangat jelas, iaitu setiap soalan mempunyai URL yang unik. Jadi kita boleh mendapatkan maklumat tentang masalah dengan membina URL dan menghantar permintaan HTTP.
Berikut ialah demonstrasi kod PHP:
<?php $url = 'https://www.zhihu.com/question/36189228'; $html = file_get_contents($url); $data = array(); preg_match('/<title>(.*?)</title>/', $html, $match); $data['title'] = $match[1]; preg_match('/<div class="QuestionHeader-detail">(.*?)</div>/', $html, $match); $data['description'] = $match[1]; preg_match('/<div class="NumberBoard-value">(.*?)</div><span class="NumberBoard-label">关注者</span>/', $html, $match); $data['followers'] = $match[1]; preg_match('/<div class="NumberBoard-value">(.*?)</div><span class="NumberBoard-label">浏览</span>/', $html, $match); $data['views'] = $match[1]; preg_match('/<div class="NumberBoard-value">(.*?)</div><div class="NumberBoard-label">回答</div>/', $html, $match); $data['answers'] = $match[1]; preg_match_all('/<a href="/topic/(.*?)">(.*?)</a>/', $html, $matches); $data['tags'] = implode(',', $matches[2]); preg_match_all('/<a class="RelatedQuestionItem-title" href="(.*?)" target="_blank">(.*?)</a>/', $html, $matches); $data['related_questions'] = array_combine($matches[1], $matches[2]); echo json_encode($data, JSON_UNESCAPED_UNICODE);
Ungkapan biasa PHP digunakan di sini untuk memadankan maklumat yang diperlukan dalam teks HTML. Walaupun kaedah ini bergantung pada struktur halaman HTML, ia biasanya boleh menangkap data yang diperlukan dalam kebanyakan kes. Dapat dilihat melalui kod mudah, kita boleh memperoleh pelbagai maklumat tentang masalah ini.
Pengarang jawapan
Kandungan jawapan
Jawapan Bilangan suka dan komen
Untuk setiap jawapan, kami juga boleh mendapatkan maklumat berkaitannya dengan membina URL dan menghantar permintaan HTTP.
Berikut ialah demonstrasi kod PHP:
<?php $url = 'https://www.zhihu.com/question/36189228/answer/243147352'; $html = file_get_contents($url); $data = array(); preg_match('/<meta itemprop="name" content="(.*?)">/', $html, $match); $data['author'] = $match[1]; preg_match('/<div class="RichText ztext">(.*?)</div>/', $html, $match); $data['content'] = $match[1]; preg_match('/<button class="Button VoteButton VoteButton--up" aria-pressed="false" tabindex="0" aria-label="(.*?)">/', $html, $match); $data['upvotes'] = $match[1]; preg_match('/<button class="Button CommentButton" tabindex="0" aria-label="(.*?)">/', $html, $match); $data['comments'] = $match[1]; echo json_encode($data, JSON_UNESCAPED_UNICODE);
Begitu juga, kami menggunakan ungkapan biasa PHP untuk memadankan maklumat yang diperlukan dalam teks HTML. Perlu diingat bahawa mendapatkan kandungan jawapan memerlukan penggunaan ztext dan bukannya kelas AnswerItem-content. Ini kerana Zhihu menukar nama kelas CSS yang berkaitan selepas kemas kini.
Atas ialah kandungan terperinci Gunakan PHP untuk melaksanakan program untuk menangkap soalan dan jawapan Zhihu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!