<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    python 爬取 44130 條用戶觀影數據,分析挖掘用戶與電影之間的隱藏信息!

    Andrew2021-02-17 02:42:48

    前言

    明天就是大年初一,很多電影也上映,看電影前很多人都喜歡去『豆瓣』看影評,所以我爬取44130條『豆瓣』的用戶觀影數據,分析用戶之間的關系,電影之間的聯系,以及用戶和電影之間的隱藏關系。

    圖片

    爬取觀影數據

    數據來源

    https://movie.douban.com/

    圖片

    在『豆瓣』平臺爬取用戶觀影數據。

    爬取用戶列表

    網頁分析

    圖片

    為了獲取用戶,我選擇了其中一部電影的影評,這樣可以根據評論的用戶去獲取其用戶名稱(后面爬取用戶觀影記錄只需要『用戶名稱』)。

    https://movie.douban.com/subject/24733428/reviews?start=0

    url中start參數是頁數(page20,每一頁20條數據),因此start=0、20、40…,也就是*20的倍數,通過改變start參數值就可以獲取這4614條用戶的名稱。**

    圖片

    查看網頁的標簽,可以找到『用戶名稱』值對應的標簽屬性。

    編程實現
    i=0
    url = "https://movie.douban.com/subject/24733428/reviews?start=" + str(i * 20)
    r = requests.get(url, headers=headers)
    r.encoding = 'utf8'
    s = (r.content)
    selector = etree.HTML(s)
    
    for item in selector.xpath('//*[@class="review-list  "]/div'):
        userid = (item.xpath('.//*[@class="main-hd"]/a[2]/@href'))[0].replace("https://www.douban.com/people/","").replace("/", "")
        username = (item.xpath('.//*[@class="main-hd"]/a[2]/text()'))[0]
        print(userid)
        print(username)
        print("-----")

    圖片

    爬取用戶的觀影記錄

    上一步爬取到『用戶名稱』,接著爬取用戶觀影記錄需要用到『用戶名稱』。

    網頁分析

    圖片

    圖片

    #https://movie.douban.com/people/{用戶名稱}/collect?start=15&sort=time&rating=all&filter=all&mode=grid
    https://movie.douban.com/people/mumudancing/collect?start=15&sort=time&rating=all&filter=a

    通過改變『用戶名稱』,可以獲取到不同用戶的觀影記錄。

    url中start參數是頁數(page15,每一頁15條數據),因此start=0、15、30…,也就是*15的倍數,通過改變start參數值就可以獲取這1768條觀影記錄稱。**

    圖片

    查看網頁的標簽,可以找到『電影名』值對應的標簽屬性。

    編程實現
    url = "https://movie.douban.com/people/mumudancing/collect?start=15&sort=time&rating=all&filter=all&mode=grid"
    r = requests.get(url, headers=headers)
    r.encoding = 'utf8'
    s = (r.content)
    selector = etree.HTML(s)
    
    for item in selector.xpath('//*[@class="grid-view"]/div[@class="item"]'):
        text1 = item.xpath('.//*[@class="title"]/a/em/text()')
        text2 = item.xpath('.//*[@class="title"]/a/text()')
        text1 = (text1[0]).replace(" ", "")
        text2 = (text2[1]).replace(" ", "").replace("\n", "")
        print(text1+text1)
        print("-----")

    圖片

    保存到excel

    定義表頭
    # 初始化execl表
    def initexcel(filename):
        # 創建一個workbook 設置編碼
        workbook = xlwt.Workbook(encoding='utf-8')
        # 創建一個worksheet
        worksheet = workbook.add_sheet('sheet1')
        workbook.save(str(filename)+'.xls')
        ##寫入表頭
        value1 = [["用戶", "影評"]]
        book_name_xls = str(filename)+'.xls'
        write_excel_xls_append(book_name_xls, value1)

    excel表有兩個標題(用戶, 影評)

    寫入excel
    # 寫入execl
    def write_excel_xls_append(path, value):
        index = len(value)  # 獲取需要寫入數據的行數
        workbook = xlrd.open_workbook(path)  # 打開工作簿
        sheets = workbook.sheet_names()  # 獲取工作簿中的所有表格
        worksheet = workbook.sheet_by_name(sheets[0])  # 獲取工作簿中所有表格中的的第一個表格
        rows_old = worksheet.nrows  # 獲取表格中已存在的數據的行數
        new_workbook = copy(workbook)  # 將xlrd對象拷貝轉化為xlwt對象
        new_worksheet = new_workbook.get_sheet(0)  # 獲取轉化后工作簿中的第一個表格
        for i in range(0, index):
            for j in range(0, len(value[i])):
                new_worksheet.write(i+rows_old, j, value[i][j])  # 追加寫入數據,注意是從i+rows_old行開始寫入
        new_workbook.save(path)  # 保存工作簿

    定義了寫入excel函數,這樣爬起每一頁數據時候調用寫入函數將數據保存到excel中。

    圖片

    最后采集了44130條數據(原本是4614個用戶,每個用戶大約有500~1000條數據,預計400萬條數據)。但是為了演示分析過程,只爬取每一個用戶的前30條觀影記錄(因為前30條是最新的)。

    最后這44130條數據會在下面分享給大家

    數據分析挖掘

    讀取數據集

    def read_excel():
        # 打開workbook
        data = xlrd.open_workbook('豆瓣.xls')
        # 獲取sheet頁
        table = data.sheet_by_name('sheet1')
        # 已有內容的行數和列數
        nrows = table.nrows
        datalist=[]
        for row in range(nrows):
            temp_list = table.row_values(row)
            if temp_list[0] != "用戶" and temp_list[1] != "影評":
                data = []
                data.append([str(temp_list[0]), str(temp_list[1])])
                datalist.append(data)
    
        return datalist

    圖片

    從豆瓣.xls中讀取全部數據放到datalist集合中。

    分析1:電影觀看次數排行

    ###分析1:電影觀看次數排行
    def analysis1():
        dict ={}
        ###從excel讀取數據
        movie_data = read_excel()
        for i in range(0, len(movie_data)):
            key = str(movie_data[i][0][1])
            try:
                dict[key] = dict[key] +1
            except:
                dict[key]=1
        ###從小到大排序
        dict = sorted(dict.items(), key=lambda kv: (kv[1], kv[0]))
        name=[]
        num=[]
        for i in range(len(dict)-1,len(dict)-16,-1):
            print(dict[i])
            name.append(((dict[i][0]).split("/"))[0])
            num.append(dict[i][1])
    
        plt.figure(figsize=(16, 9))
        plt.title('電影觀看次數排行(高->低)')
        plt.bar(name, num, facecolor='lightskyblue', edgecolor='white')
        plt.savefig('電影觀看次數排行.png')

    圖片

    分析
    1. 由于用戶信息來源于『心靈奇旅』評論,因此其用戶觀看量最大。

    2. 最近的熱播電影中,播放量排在第二的是『送你一朵小紅花』,信條和拆彈專家2也緊跟其后。

    分析2:用戶畫像(用戶觀影相同率最高)

    ###分析2:用戶畫像(用戶觀影相同率最高)
    def analysis2():
        dict = {}
        ###從excel讀取數據
        movie_data = read_excel()
    
        userlist=[]
        for i in range(0, len(movie_data)):
            user = str(movie_data[i][0][0])
            moive = (str(movie_data[i][0][1]).split("/"))[0]
            #print(user)
            #print(moive)
    
            try:
                dict[user] = dict[user]+","+str(moive)
            except:
                dict[user] =str(moive)
                userlist.append(user)
    
        num_dict={}
        # 待畫像用戶(取第一個)
        flag_user=userlist[0]
        movies = (dict[flag_user]).split(",")
        for i in range(0,len(userlist)):
            #判斷是否是待畫像用戶
            if flag_user != userlist[i]:
                num_dict[userlist[i]]=0
                #待畫像用戶的所有電影
                for j in range(0,len(movies)):
                    #判斷當前用戶與待畫像用戶共同電影個數
                    if movies[j] in dict[userlist[i]]:
                        # 相同加1
                        num_dict[userlist[i]] = num_dict[userlist[i]]+1
        ###從小到大排序
        num_dict = sorted(num_dict.items(), key=lambda kv: (kv[1], kv[0]))
        #用戶名稱
        username = []
        #觀看相同電影次數
        num = []
        for i in range(len(num_dict) - 1, len(num_dict) - 9, -1):
            username.append(num_dict[i][0])
            num.append(num_dict[i][1])
    
        plt.figure(figsize=(25, 9))
        plt.title('用戶畫像(用戶觀影相同率最高)')
        plt.scatter(username, num, color='r')
        plt.plot(username, num)
        plt.savefig('用戶畫像(用戶觀影相同率最高).png')

    圖片

    分析

    以用戶『mumudancing』為例進行用戶畫像

    1. 從圖中可以看出,與用戶『mumudancing』觀影相同率最高的是:“請帶我回布拉格”,其次是“李校尉”。

    2. 用戶:’絕命紙牌’, ‘笨小孩’, ‘私享史’, ‘溫衡’, ‘沈唐’, ‘修左’,的觀影相同率**相同**。

    分析3:用戶之間進行電影推薦

    ###分析3:用戶之間進行電影推薦(與其他用戶同時被觀看過)
    def analysis3():
        dict = {}
        ###從excel讀取數據
        movie_data = read_excel()
    
        userlist=[]
        for i in range(0, len(movie_data)):
            user = str(movie_data[i][0][0])
            moive = (str(movie_data[i][0][1]).split("/"))[0]
            #print(user)
            #print(moive)
    
            try:
                dict[user] = dict[user]+","+str(moive)
            except:
                dict[user] =str(moive)
                userlist.append(user)
    
        num_dict={}
        # 待畫像用戶(取第2個)
        flag_user=userlist[0]
        print(flag_user)
        movies = (dict[flag_user]).split(",")
        for i in range(0,len(userlist)):
            #判斷是否是待畫像用戶
            if flag_user != userlist[i]:
                num_dict[userlist[i]]=0
                #待畫像用戶的所有電影
                for j in range(0,len(movies)):
                    #判斷當前用戶與待畫像用戶共同電影個數
                    if movies[j] in dict[userlist[i]]:
                        # 相同加1
                        num_dict[userlist[i]] = num_dict[userlist[i]]+1
        ###從小到大排序
        num_dict = sorted(num_dict.items(), key=lambda kv: (kv[1], kv[0]))
    
        # 去重(用戶與觀影率最高的用戶兩者之間重復的電影去掉)
        user_movies = dict[flag_user]
        new_movies = dict[num_dict[len(num_dict)-1][0]].split(",")
        for i in range(0,len(new_movies)):
            if new_movies[i] not in user_movies:
                print("給用戶("+str(flag_user)+")推薦電影:"+str(new_movies[i]))

    圖片

    分析

    以用戶『mumudancing』為例,對用戶之間進行電影推薦

    1. 根據與用戶『mumudancing』觀影率最高的用戶(A)進行進行關聯,然后獲取用戶(A)的全部觀影記錄

    2. 將用戶(A)的觀影記錄推薦給用戶『mumudancing』(去掉兩者之間重復的電影)。

    分析4:電影之間進行電影推薦

    ###分析4:電影之間進行電影推薦(與其他電影同時被觀看過)
    def analysis4():
        dict = {}
        ###從excel讀取數據
        movie_data = read_excel()
    
        userlist=[]
        for i in range(0, len(movie_data)):
            user = str(movie_data[i][0][0])
            moive = (str(movie_data[i][0][1]).split("/"))[0]
            try:
                dict[user] = dict[user]+","+str(moive)
            except:
                dict[user] =str(moive)
                userlist.append(user)
    
        movie_list=[]
        # 待獲取推薦的電影
        flag_movie = "送你一朵小紅花"
        for i in range(0,len(userlist)):
            if flag_movie in dict[userlist[i]]:
                 moives = dict[userlist[i]].split(",")
                 for j in range(0,len(moives)):
                     if moives[j] != flag_movie:
                         movie_list.append(moives[j])
    
        data_dict = {}
        for key in movie_list:
            data_dict[key] = data_dict.get(key, 0) + 1
    
        ###從小到大排序
        data_dict = sorted(data_dict.items(), key=lambda kv: (kv[1], kv[0]))
        for i in range(len(data_dict) - 1, len(data_dict) -16, -1):
                print("根據電影"+str(flag_movie)+"]推薦:"+str(data_dict[i][0]))

    圖片

    分析

    以電影『送你一朵小紅花』為例,對電影之間進行電影推薦

    1. 獲取觀看過『送你一朵小紅花』的所有用戶,接著獲取這些用戶各自的觀影記錄。

    2. 將這些觀影記錄進行統計匯總(去掉“送你一朵小紅花”),然后進行從高到低進行排序,最后可以獲取到與電影『送你一朵小紅花』關聯度最高排序的集合。

    3. 將關聯度最高的前15部電影給用戶推薦。

    總結

    1. 分析爬取豆瓣平臺數據思路,并編程實現

    2. 對爬取的數據進行分析(電影觀看次數排行用戶畫像用戶之間進行電影推薦電影之間進行電影推薦

    3. 本文涉及的代碼數據集在下方獲取。

    完整源碼和數據集地址如下:

    gitee.com/lyc96/douban-movie

    原創:李運辰
    原文鏈接:https://mp.weixin.qq.com/s/NRcX2he0wI3r0Qo...

    str函數python函數
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    函數簡介 云函數是騰訊云為企業和開發者們提供的無服務器執行環境,可以無需購買和管理服務器的情況下運行代碼。只需使用平臺支持的語言編寫核心代碼并設置代碼運行的條件,即可在騰訊云基礎設施上彈性、安全地運行代碼。SCF是實時文件處理和數據處理等場景下理想的計算平臺。服務端配置云函數基礎配置選擇自定義創建,地域自選,部署模式,代碼部署,運行環境Python3.6,其余默認即可。
    Dump il2cpp 通常有兩種方法,一種是用 Il2CppDumper 加載二進制文件直接dump. 另一種是用Zygisk-Il2CppDumper注入目標進程來dump il2cpp.接下來介紹一種我常用的方法。原理Unicorn 是一個CPU模擬框架,Qiling是基于Unicorn的一個系統模擬框架。一個內存掃描工具,這里主要主要用來dump進程的完整內存。準備首先用 mypower 將目標進程dump下來。啟動mypoewr后運行以下命令可得到進程的內存鏡像。
    ChainFlag是一個區塊鏈主題的CTF OJ平臺,個人感覺現有題目質量很高,值得一做,這里分享下自己做題的過程。
    0x00 前言常見webshell管理工具的分析記錄,著重在流量側。0x01 caidao1、配置使用菜刀是一款專業的網站管理軟件,用途廣泛,使用方便,小巧實用。支持動態腳本[如php/jsp/aspx/asp]的網站!新版antSword的ua也做了隨機變換。在內置的rot13編碼和解碼器下,數據會通過隨機變量傳遞給str_rot13函數,通過變換還原后再交給eval函數執行。
    請求頭的參數非常容易,接下來看看請求體的參數。在signData函數內部下一個斷點其中比較重要的是的函數,這里生成了一段字符串來計算簽名這個函數和查詢參數編碼的功能類似,除了data參數,并且在最后拼接了一個定值字符串,這里用python進行簡單的復現 復制代碼 隱藏代碼。拿到密鑰后,直接使用sm4算法加密就可以得到了,現在所有參數都已經能夠獲取了,就可以發送請求了。
    target_func: sark.Function 類型,表示要查找交叉引用關系的目標函數對象。max_depth: int 類型,表示查找引用關系的最大深度。② 然后根據 include_data_xref 的設置,獲取該函數中所有的引用 refes。③ 遍歷函數的所有引用 ref,如果該引用 ref 指向目標函數,則在有向圖 G 中通過 add_edge 函數添加一條從當前函數到目標函數的邊,并返回 True。④ 如果引用指向另一個函數,則遞歸調用 find_cross_refs 函數查找兩個函數之間的交叉引用關系。⑤ 如果所有引用遍歷完,仍然沒有找到交叉引用,則返回 False。
    之后想到了更完美的辦法
    為了進行并行處理,我們將任務劃分為多個子單元。我們將把數據以數組的形式送入函數,它將根據可用的工作者的數量,一次并行處理多個值。這些工作器是基于你的處理器內的核心數量的。Python包減少大文件的處理時間。處理時間可能因機器不同而不同。我們將導入multiprocessing、joblib和tqdm用于并行處理,pandas用于數據攝取,re、nltk和string用于文本處理。
    就需要了解一下名稱空間python的名稱空間,是從名稱到對象的映射,在python程序的執行過程中,至少會存在兩個名稱空間。python中一切均為對象,均繼承于object對象,python的object類中集成了很多的基礎函數,假如我們需要在payload中使用某個函數就需要用object去操作。
    前言本文將記錄學習下如何通過 Python 腳本實現 WIFI 密碼的暴力破解,從而實現免費蹭網。無圖形界面先來看看沒有圖形界面版的爆破腳本。WIFI爆破import pywififrom pywifi import constimport timeimport datetime. 下面進行改造優化:import pywifiimport timefrom pywifi import const. # WiFi掃描模塊def wifi_scan(): # 初始化wifi wifi = pywifi.PyWiFi() # 使用第一個無線網卡 interface = wifi.interfaces()[0] # 開始掃描 interface.scan() for i in range: time.sleep print('\r掃描可用 WiFi 中,請稍后。。。
    Andrew
    暫無描述
      亚洲 欧美 自拍 唯美 另类