php爬蟲 知乎使用者資料爬取和分析

2021-09-19 09:54:09 字數 2795 閱讀 2378

背景說明:小拽利用php的curl寫的爬蟲,實驗性的爬取了知乎5w使用者的基本資訊;同時,針對爬取的資料,進行了簡單的分析呈現。demo 位址

移動端分析資料截圖

pc端分析資料截圖

整個爬取,分析,展現過程大概分如下幾步,小拽將分別介紹

php的curl擴充套件是php支援的,允許你與各種伺服器使用各種型別的協議進行連線和通訊的庫。是乙個非常便捷的抓取網頁的工具,同時,支援多執行緒擴充套件。

本程式抓取的是知乎對外提供使用者訪問的個人資訊頁面抓取過程需要攜帶使用者cookie才能獲取頁面。直接上碼

對於抓取過來的網頁進行儲存,要想進行進一步的爬取,頁面必須包含有可用於進一步爬取使用者的鏈結。通過對知乎頁面分析發現:在個人中心頁面中有關注人和部分點讚人和被關注人。

如下所示

// 抓取的html頁面中發現了新的使用者,可用於爬蟲

ok,這樣子就可以通過自己-》關注人-》關注人的關注人-》。。。進行不斷爬取。接下來就是通過正則匹配提取該資訊

// 匹配到抓取頁面的所有使用者

preg_match_all('/\/people\/([\w-]+)\"/i', $str, $match_arr);

// 去重合併入新的使用者陣列,使用者進一步抓取

self::$newuserarr = array_unique(array_merge($match_arr[1], self::$newuserarr));

到此,整個爬蟲過程就可以順利進行了。

如果需要大量的抓取資料,可以研究下curl_multipcntl進行多執行緒的快速抓取,此處不做贅述。

通過正則可以進一步匹配出更多的該使用者資料,直接上碼。

// 獲取使用者頭像

preg_match('//i', $str, $match_img);

$img_url = $match_img[1];

// 匹配使用者名稱:

// 崔小拽

preg_match('/([\x-\x]+).+span>/u', $str, $match_name);

$user_name = $match_name[1];

// 匹配使用者簡介

// class bio span 中文

preg_match('/([\x-\x]+).+span>/u', $str, $match_title);

$user_title = $match_title[1];

// 匹配性別

//男  

// gender value1 ;結束 中文

preg_match('/preg_match('//u', $str, $match_city);

$user_city = $match_city[1];

// 匹配工作

//人見人罵的公司

preg_match('//u', $str, $match_employment);

$user_employ = $match_employment[1];

// 匹配職位

// 程式猿

preg_match('//u', $str, $match_position);

$user_position = $match_position[1];

// 匹配學歷

// 研究僧

preg_match('//u', $str, $match_education);

$user_education = $match_education[1];

// 工作情況

// 挨踢

preg_match('/([\x-

\x]+)41 個話題

preg_match('/class=\"?zg-link-litblue\"?>(\d+)\s.+strong>/i', $str, $match_topic);

$user_topic = $match_topic[1];

// 關注人數

// 關注了

preg_match_all('/(\d+)<.>

$user_care = $match_care[1][0];

$user_be_careed = $match_care[1][1];

// 歷史瀏覽量

// 個人主頁被17人瀏覽

preg_match('/class=\"?zg-gray-normal\"?.+>(\d+)<.>/i', $str, $match_browse);

$user_browse = $match_browse[1];

在抓取的過程中,有條件的話,一定要通過redis入庫,確實能提公升抓取和入庫效率。沒有條件的話只能通過sql優化。這裡來幾發心德。

資料的呈現主要使用echarts 3.0,感覺對於移動端相容還不錯。相容移動端的頁面響應式布局主要通過幾個簡單的css控制,**如下

/*相容性和響應式div設計*/

@media screen and (max-width: 480px)

.adapt-div

.half-div

.whole-div

}.half-div

.whole-div

整個過程中涉及php,shell,js,css,html,正則等語言和部署等基礎知識,但還有諸多需要改進完善,小拽特此記錄,後續補充例:

puppeteer爬取知乎答案列表爬蟲

知乎應該很多人沒事的時候都會去看,畢竟知乎上平均年收入幾十萬,日常出國.哈哈 聽朋友說,今天閒來無事寫了乙個爬取知乎答案列表的爬蟲.當然知乎有營養的內容還是很多的 之前寫過一次抓答案列表介面的爬蟲,感覺不太好,還得找每個問題的請求介面,這次使用puppeteer來通過頁面顯示內容抓取 puppete...

知乎資料爬取及儲存

import requests from pymysql conn import mysql connect url 分析所有請求後發現上面的url可以直接獲取所需資料的json檔案,兩個引數分 別為offset,limit。其中offset控制起始資料序號,limit控制本次資料數量 經測試off...

步步分析爬取知乎使用者頭像

知乎是個練習爬蟲的好地方,可以找到很多資源,還能挑戰一下反爬蟲機制。剛開始不懂得ajax的時候真的拿這些動態載入的網頁沒有辦法,只好退一步,用selenium chromedriver寫一些簡單的程式,這樣做雖然簡化了開發過程,但是總是覺得效率很低,而卻方式不太優雅,只是呼叫瀏覽器去做著做那,遇到異...