首頁  >  文章  >  後端開發  >  使用 PHP 實作抓取知問題及回答的程序

使用 PHP 實作抓取知問題及回答的程序

王林
王林原創
2023-06-13 23:21:21949瀏覽

知乎作為一個極受歡迎的知識分享社區,其上眾多用戶貢獻了大量高品質的問題和回答,對於學習和工作的人們來說,這些內容對於解決問題和拓展視野非常有幫助。如果想要整理和利用這些內容,就需要使用抓取程式來取得相關資料。本文將介紹使用 PHP 撰寫抓取知乎問題及回答的程式。

  1. 簡介
    知乎是一個內容非常豐富的平台,其上的內容包括但不限於問題、答案、專欄、主題、使用者等。我們可以透過爬取知乎上的資料進一步挖掘這些內容的價值。這裡主要介紹如何使用 PHP 抓取知識問題和答案。
  2. 問題抓取
    首先,我們需要明確抓取的目標是什麼。對於知乎上的問題,我們需要以下資訊:

問題標題
問題描述
該問題的追蹤者數、瀏覽數、回答數
問題的標籤
相關問題
知乎上的問題有一個非常明顯的特點,那就是每個問題都有一個獨一無二的URL。所以我們可以透過建構 URL 並發送 HTTP 請求來獲取該問題的相關資訊。

以下是 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);

這裡使用了 PHP 的正規表示式來符合 HTML 文字中的所需資訊。這種方式雖然依賴 HTML 頁面結構,但在大多數情況下都能夠正常抓取所需資料。可見,透過簡單的程式碼,我們就可以獲得該問題的各種資訊。

  1. 回答抓取
    對於知乎上的回答,我們需要以下資訊:

回答的作者
回答的內容
該回答的讚數、評論數
對於每個回答,我們同樣可以透過建構URL 並發送HTTP 請求來獲取其相關資訊。

以下是 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);

同樣地,我們使用了 PHP 的正規表示式來符合 HTML 文字中的所需資訊。值得注意的是,取得答案的內容需要使用 ztext 而不是 AnswerItem-content 類別。這是因為知乎更新後改變了相關 CSS 類別名稱。

  1. 總結
    本文介紹如何使用 PHP 撰寫抓取知乎問題和答案的程式。我們可以根據需要獲取不同的信息,對於知乎上的內容進行綜合分析和利用。對於 PHP 開發者來說,這是一個非常實用的技能,可以用於資料分析、搜尋引擎優化等多方面的工作。

以上是使用 PHP 實作抓取知問題及回答的程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn