python 分析 知乎粉絲數據

来源:https://www.cnblogs.com/flash314/archive/2019/08/21/11391592.html
-Advertisement-
Play Games

昨天花了一下午寫了一個小爬蟲,用來分析自己的粉絲數據。這個真好玩!今天幫了群里好多大V也爬了他們的數據。運行速度:每分鐘5千粉絲以上。暫時先寫成這樣,這兩天要準備補考,沒有時間繼續玩這個。 下次要改進的地方:1、多線程 2、scrapy 3、深度數據 4、分散式爬蟲 希望實現的功能: + 1、地區、 ...


昨天花了一下午寫了一個小爬蟲,用來分析自己的粉絲數據。這個真好玩!今天幫了群里好多大V也爬了他們的數據。運行速度:每分鐘5千粉絲以上。暫時先寫成這樣,這兩天要準備補考,沒有時間繼續玩這個。

下次要改進的地方:1、多線程 2、scrapy 3、深度數據 4、分散式爬蟲

希望實現的功能:

  • 1、地區、教育程度、註冊時間、送粉識別、顏值檢測
  • 2、導出 h5超秀的界面 和完美的 xlsx 數據
  • 3、對內容提出建議
  • 4、對接微信後臺實現自動化

下麵是源碼,經2019年8月21日測試可用:

from selenium.webdriver import Chrome,ChromeOptions
from requests.cookies import RequestsCookieJar
from lxml import etree
from pandas import DataFrame
import json,time,requests,re,os,clipboard

def sele_input_zhihu():
    '首次登陸知乎,需要輸入賬號密碼'
    # 防止檢測
    option = ChromeOptions()
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    driver = Chrome(options=option)
    # 登錄
    driver.get("http://www.zhihu.com/")
    name=input("請輸入手機號或郵箱:")
    pwd=input("請輸入密碼:")
    needPass=driver.find_element_by_xpath("//div[@class='SignFlow-tab']")
    needPass.click()
    driver.find_element_by_name("username").send_keys(name)
    driver.find_element_by_name("password").send_keys(pwd)
    submitBtn = driver.find_element_by_xpath("//button[@type='submit']")
    submitBtn.click()
    time.sleep(5)
    # 保存cookies
    cookies = driver.get_cookies()
    with open("cookies.json", "w") as fp:
        json.dump(cookies, fp)
    print("保存cookies成功!")
    driver.close()

def login_zhihu(s):
    '利用保存的cookies登錄知乎'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
    }
    s.headers=headers
    cookies_jar = RequestsCookieJar()
    with open("cookies.json","r")as fp:
        cookies = json.load(fp)
        for cookie in cookies:
            cookies_jar.set(cookie['name'], cookie['value'])
    s.cookies.update(cookies_jar)
    print("登錄成功!")

# 淺數據處理
# "users":{(.*), "questions":{}
def parse_infos(session,url,id):
    content = session.get(url).text
    info_json=re.search(r'"users":(.*}}),"questions":{}',content).group(1)
    json_dict=json.loads(info_json)
    items=[]
    for key in json_dict.keys():
        item = json_dict[key]
        if "name" in item.keys() and key!=id:
            custom = "是" if(item["useDefaultAvatar"]==False) else "否"
            thetype="普通用戶" if(item["isOrg"]==False) else "機構號"
            gender="女" if(item["gender"]==0) else ("男" if (item["gender"]==1)else "未知")
            vip="否"if(item["vipInfo"]["isVip"]==False) else "是"
            items.append([item["urlToken"] , item["name"] , custom , item["avatarUrl"], item["url"] , thetype , item["headline"] , gender , vip ,  item["followerCount"] , item["answerCount"] , item["articlesCount"]])
    return items

def main():
    # 登錄
    if not os.path.exists("cookies.json"):
        print("未登錄賬戶,請登錄!")
        sele_input_zhihu()
    session=requests.session()
    login_zhihu(session)

    # 需要的數據
    zhuye_url="https://www.zhihu.com/people/you-yi-shi-de-hu-xi/activities"     # 這個地方用來輸入主頁鏈接
    zhuye=re.match(r"(.*)/activities$",zhuye_url).group(1)
    id = re.match(r".*/(.*)$",zhuye).group(1)
    followers_url=zhuye+r"/followers?page={}"

    # 分析粉絲個數和頁碼
    html = etree.HTML(session.get(zhuye_url).text)
    text=html.xpath("//div[@class='NumberBoard FollowshipCard-counts NumberBoard--divider']//strong/text()")[1]
    follows = int("".join(text.split(",")))
    pages = follows//20+1
    print("關註者 "+str(follows)+"人,共 "+str(pages)+"頁數據!")

    # 獲取導出淺數據
    all_info = []
    for i in range(1,pages+1):
        infos_url = followers_url.format(i)
        print("正在獲取第 "+str(i)+" 頁數據...")
        array = parse_infos(session,infos_url,id)
        all_info+=array
    many=len(all_info)
    print("數據獲取完成,共"+ str(many)+" 條數據!")
    data = DataFrame(data=all_info,columns=["id", "用戶名", "自定義頭像", "頭像url", "主頁鏈接", "類型", "一句話描述", "性別", "鹽選會員",  "粉絲總數", "回答數", "文章數"])
    data.to_csv(id+"_淺數據.csv",encoding="utf-8-sig")
    print("數據已導出到"+ id+"_淺數據.csv!")

    # 生成粉絲數據報告
    wood=org=female=money=male=f2k=f5k=f10k=gfemale=gmale=0
    for info in all_info:
        if info[2]=="否" and info[9]==0 and info[10]<=2 and info[11]<=2: wood+=1
        if info[5]=="機構號": org+=1
        if info[7]=="女":
            female+=1
            if info[9]>=20: gfemale+=1
        else:
            if info[9]>=50: gmale+=1
        if info[7]=="男": male+=1
        if info[8]=="是": money+=1
        if info[9]>=10000: f10k+=1
        elif info[9]>=5000: f5k+=1
        elif info[9]>=2000: f2k+=1
    report="*"*40+"\n淺粉絲數據快覽:在你所有 "+str(many)+" 個粉絲中:\n"+"共有僵屍粉 "+str(wood)+" 個,占比 "+"{:.4%}".format(wood/many)+" ,這可是相當"+(" 低 " if (wood/many)<0.2 else " 高 ")+"的比例。\n"+"另外,粉絲的男女比例為 1 : "+"{:.3}".format(female/male)+" ,看來你深受廣大"+(" 女 " if (female>=male) else " 男 ")+"性同胞的喜愛!\n"+"靚女"+str(gfemale)+"人,靚仔"+str(gmale)+"人 【只統計有顏值的】\n"+"在你的所有粉絲里,氪金學習的用戶有 "+str(money)+" 個,占比 "+"{:.3%}".format(money/many)+",看來您的粉絲多為"+("高"if(money/many>0.045) else" 低 ")+"收入用戶!\n"+" ◉ 粉絲10K+有 "+str(f10k)+" 人;\n"+" ◉ 粉絲5K-10K有 "+str(f5k)+" 人;\n"+" ◉ 粉絲2K-5K有 "+str(f2k)+" 人;\n"
    if org>=1:
        report+="除此之外,你的粉絲中還有 "+str(org)+" 位機構號!詳細的報告快去 淺數據.csv 里看看吧!\n"
    clipboard.copy(report)
    print(report)

if __name__=="__main__":
    main()

運行截圖:

這是我今天的粉絲報告:


淺粉絲數據快覽:在你所有 9934 個粉絲中:
共有僵屍粉 2091 個,占比 21.0489% ,這可是相當 高 的比例。
另外,粉絲的男女比例為 1 : 0.352 ,看來你深受廣大 男 性同胞的喜愛!
靚女123人,靚仔354人 【只統計有顏值的】
在你的所有粉絲里,氪金學習的用戶有 477 個,占比 4.802%,看來您的粉絲多為高收入用戶!
◉ 粉絲10K+有 11 人;
◉ 粉絲5K-10K有 7 人;
◉ 粉絲2K-5K有 17 人;
除此之外,你的粉絲中還有 1 位機構號!詳細的報告快去 淺數據.csv 里看看吧!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基本類: AtomicInteger AtomicLong "AtomicBoolean" 數組類型: AtomicIntegerArray AtomicLongArray AtomicReferenceArray 介紹 由於在多線程條件下,如果對共用變數修改容易造成數據不一致的情況,所以對於共用變 ...
  • 最近一個朋友,在謀求架構師崗位的工作,經歷了魔都的一批互聯網公司的洗禮,讓他把面試經歷整理了一下,給大家一些經驗吧,希望各位後面去這些公司面試的時候,能有些心理準備。 還唄 地點:2號線金科路地鐵站(長泰廣場A座) 環境:環境還不錯,裝修偏簡約風,工位是互聯網公司那種排排坐。 投遞方式:拉勾網 面試 ...
  • 代理(proxy)分為2種: 靜態代理 動態代理 動態代理常用的有jdk動態代理、cglib代理。 靜態代理 1、新建User介面 2、新建實現類UserImpl 3、新建代理類UserProxy,也實現User介面,對目標對象(的方法)進行增強 4、使用代理。新建測試類Test 靜態代理的特點 代 ...
  • 一、前言 在Java中,工具類定義了一組公共方法,這篇文章將介紹Java中使用最頻繁及最通用的Java工具類。以下工具類、方法按使用流行度排名,參考數據來源於Github上隨機選取的5萬個開源項目源碼。 二、org.apache.commons.io.IOUtils closeQuietly:關閉一 ...
  • 一、定時任務實現的幾種方式: Timer 這是java自帶的java.util.Timer類,這個類允許你調度一個java.util.TimerTask任務。使用這種方式可以讓你的程式按照某一個頻度執行,但不能在指定時間運行。一般用的較少。 ScheduledExecutorService 也jdk ...
  • 使用Python採集SQL Server資料庫伺服器磁碟信息時,遇到了一個錯誤“CONFIG statement cannot be used inside a user transaction.DB-Lib error message 20018, severity 16”,那麼為什麼遇到這個錯誤... ...
  • 摘要: 大家都知道註解是實現了java.lang.annotation.Annotation介面,眼見為實,耳聽為虛,有時候眼見也不一定是真實的。 元註解: 元註解 一般用於指定某個註解生命周期以及作用目標等信息。正如源碼的註釋一樣,如果自定義的註解沒有添加元註解就和平常的註釋沒有多大的區別,有了元 ...
  • - 1.win10安裝JDK8 - 2.數據類型與變數 - 3.運算符 - 4.程式流程式控制制 - 5.數組 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...