Zhihu는 매우 인기 있는 지식 공유 커뮤니티입니다. 많은 사용자가 고품질의 질문과 답변을 많이 제공했습니다. 공부하고 일하는 사람들에게 이 콘텐츠는 문제를 해결하고 시야를 넓히는 데 매우 도움이 됩니다. 이 콘텐츠를 정리하고 활용하려면 스크레이퍼를 사용하여 관련 데이터를 얻어야 합니다. 이 기사에서는 PHP를 사용하여 Zhihu 질문과 답변을 크롤링하는 프로그램을 작성하는 방법을 소개합니다.
질문 제목
질문 설명
팔로어 수, 조회수 및 질문에 대한 답변
질문 레이블
관련 질문
Zhihu에 대한 매우 분명한 질문이 있습니다. 각 질문마다 고유한 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 페이지 구조에 따라 다르지만 일반적으로 대부분의 경우 필요한 데이터를 캡처할 수 있습니다. 간단한 코드를 통해 이 문제에 대한 다양한 정보를 얻을 수 있음을 알 수 있다.
답변 작성자
답변 내용
답변에 대한 좋아요 및 댓글 수
각 답변에 대해 다음 정보를 구성할 수도 있습니다. 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);
마찬가지로 우리는 HTML 텍스트의 필수 정보를 일치시키기 위해 PHP의 정규식을 사용했습니다. 답변 내용을 얻으려면 AnswerItem-content 클래스 대신 ztext를 사용해야 한다는 점은 주목할 가치가 있습니다. 이는 Zhihu가 업데이트 이후 관련 CSS 클래스 이름을 변경했기 때문입니다.
위 내용은 PHP를 사용하여 Zhihu 질문과 답변을 캡처하는 프로그램 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!