Rumah >pembangunan bahagian belakang >tutorial php >Gunakan PHP untuk melaksanakan program untuk menangkap soalan dan jawapan Zhihu

Gunakan PHP untuk melaksanakan program untuk menangkap soalan dan jawapan Zhihu

王林
王林asal
2023-06-13 23:21:211014semak imbas

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.

  1. Pengenalan
    Zhihu ialah platform dengan kandungan yang kaya, termasuk tetapi tidak terhad kepada soalan, jawapan, lajur, topik, pengguna, dsb. Kami boleh meneroka lebih lanjut nilai kandungan ini dengan merangkak data pada Zhihu. Di sini kami terutamanya memperkenalkan cara menggunakan PHP untuk merangkak soalan dan jawapan Zhihu.
  2. Isu merangkak
    Pertama sekali, kita perlu menjelaskan apa matlamat merangkak. Untuk soalan tentang Zhihu, kami memerlukan maklumat berikut:

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.

  1. Tangkapan jawapan
    Untuk jawapan tentang Zhihu, kami memerlukan maklumat berikut:

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.

  1. Ringkasan
    Artikel ini memperkenalkan cara menggunakan PHP untuk menulis program untuk merangkak soalan dan jawapan Zhihu. Kami boleh mendapatkan maklumat yang berbeza mengikut keperluan dan menjalankan analisis komprehensif dan penggunaan kandungan di Zhihu. Bagi pembangun PHP, ini adalah kemahiran yang sangat praktikal yang boleh digunakan dalam analisis data, pengoptimuman enjin carian dan aspek kerja lain.

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!

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