• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于豆瓣網(wǎng)某系列電影數(shù)據(jù)采集與可視化分析

      2020-07-09 08:30黃蓉毛紅霞
      現(xiàn)代信息科技 2020年23期
      關(guān)鍵詞:網(wǎng)絡(luò)爬蟲數(shù)據(jù)采集可視化

      黃蓉 毛紅霞

      摘 ?要:文章基于Python程序設(shè)計實現(xiàn)了對豆瓣網(wǎng)站上《小時代》系列電影影評、劇照、歌曲的爬取,并針對爬取的影評做出相應(yīng)的數(shù)據(jù)清洗以及數(shù)據(jù)可視化的展示。通過爬取豆瓣網(wǎng)站電影影評及相關(guān)劇照,分析大眾對電影的態(tài)度以及電影本身的特色,并對影評數(shù)據(jù)進行清洗,進而通過數(shù)據(jù)可視化的具體形式直觀的展現(xiàn)觀眾的評價,從而解釋某種關(guān)于影視作品的現(xiàn)象。

      關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;數(shù)據(jù)采集;影評;可視化

      中圖分類號:TP393.09 ? ? 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2020)23-0004-04

      Data Collection and Visual Analysis of a Series of Films Based on Douban.com

      HUANG Rong,MAO Hongxia

      (School of Computer and Software,Jincheng College of Sichuan University,Chengdu ?611731,China)

      Abstract:Based on Python program design,this paper realized crawling of film reviews,stills and songs of Tiny Times series on Douban.com,and made corresponding data cleaning and data visual display for crawling of film reviews. Through crawling the film reviews and relevant stills on Douban.com,analyze the publics attitude towards the film and the characteristics of the film itself,and clean the film review data,and then intuitively show the audiences comments through the specific form of data visualization,so as to explain a certain phenomenon about film and television works.

      Keywords:web crawler;data collection;film review;visualization

      0 ?引 ?言

      目前國內(nèi)影視行業(yè)存在一種“爛片高票房”的現(xiàn)象,而《小時代》這個系列電影就是“爛片高票房”的一個典型例子,從《小時代》上映后就遭到很多著名的影評人的批評,大家一致認(rèn)為這部影片質(zhì)量不高,但仍有大部分人選擇花錢、花時間去觀看。為更好的解釋這一現(xiàn)象,筆者基于學(xué)校專業(yè)課程學(xué)習(xí)的Python內(nèi)容與網(wǎng)絡(luò)爬蟲內(nèi)容,選擇利用爬蟲技術(shù)對電影影評、劇照以及歌曲進行爬取,對電影本身及觀眾感受逐一分析,并通過可視化將數(shù)據(jù)展示出來。

      1 ?數(shù)據(jù)采集

      1.1 ?網(wǎng)絡(luò)爬蟲技術(shù)

      網(wǎng)絡(luò)爬蟲又通常被人們稱為網(wǎng)頁蜘蛛,它是用特定規(guī)則去爬取靜態(tài)或者動態(tài)網(wǎng)頁中所需要的數(shù)據(jù)或內(nèi)容的一種方法[1],換而言之網(wǎng)絡(luò)爬蟲的本質(zhì)就是自動抓取網(wǎng)頁信息的一段代碼。爬取數(shù)據(jù)的基本過程可以分為四步,分別是:發(fā)送一個requests字樣請求,通過HTTP庫向目標(biāo)服務(wù)器站點發(fā)送請求,等待對方服務(wù)器的響應(yīng);獲取響應(yīng)內(nèi)容,如果服務(wù)器能做出正常響應(yīng),那么就會得到一個response回應(yīng),里面所包含的內(nèi)容便是希望得到的網(wǎng)頁頁面內(nèi)容;解析網(wǎng)頁內(nèi)容,由于得到的內(nèi)容可能是HTML代碼,一般需要用到正則表達(dá)式或者XPath等等進行網(wǎng)頁解析;保存需要的數(shù)據(jù),可以將內(nèi)容存為文本、表格,也可以保存在數(shù)據(jù)庫里。本文所用方法是基于Python語言進行的網(wǎng)頁數(shù)據(jù)爬取,利用Python本身提供的眾多數(shù)據(jù)庫,高效、精準(zhǔn)的進行網(wǎng)頁抓取、網(wǎng)頁解析、數(shù)據(jù)存儲等操作[2]。

      1.2 ?應(yīng)對反爬策略

      爬蟲的速度是遠(yuǎn)遠(yuǎn)高于人類的速度的,所以在使用爬蟲的時候會占用相當(dāng)一大部分服務(wù)器的帶寬,這就增大了服務(wù)器的負(fù)載,甚至在大量用戶訪問的情況下會造成網(wǎng)絡(luò)擁堵,并且如果網(wǎng)絡(luò)爬蟲被濫用,會出現(xiàn)網(wǎng)絡(luò)上數(shù)據(jù)內(nèi)容雷同甚至一模一樣的情況,使得原創(chuàng)作品得不到保護,于是,很多網(wǎng)頁會設(shè)置反爬蟲機制,來打破這樣的局面。那么當(dāng)用戶真正需要爬取數(shù)據(jù)的時候,就必須對爬蟲進行偽裝。以下便是本項目應(yīng)對反爬的策略:

      (1)偽裝用戶代理,將請求頭部User-Agent字段改為瀏覽器的User-Agent后再發(fā)送請求User-Agent[3]。

      (2)設(shè)定休眠時間,人為瀏覽網(wǎng)頁總是會停頓幾秒,為了使爬蟲與人類相似,一般在爬取的時候會將爬蟲設(shè)置特定的休眠時間從而模擬人為登錄狀態(tài)[4],由此會使用time庫中的sleep函數(shù),在Selenium登入時模擬用戶的點擊延時行為。

      (3)使用代理IP訪問網(wǎng)站,豆瓣網(wǎng)頁在爬蟲頻繁登陸后會封禁該IP一段時間,而利用代理IP,使得同一IP訪問豆瓣服務(wù)器的頻率相對減小,服務(wù)器難以檢測[5],避免IP被封。

      (4)偽裝Cookie,一般情況下,網(wǎng)站會通過檢驗請求信息中是否存在Cookie,以及利用Cookie的值來判斷該請求到底是真實用戶還是爬蟲[6],所以需要在用戶某次登錄時獲取Cookie,將其加入到請求頭中,達(dá)到模仿用戶登錄獲取數(shù)據(jù)的效果。

      1.3 ?模擬登錄豆瓣網(wǎng)

      模擬登錄網(wǎng)頁通常有兩種方式,一種是requests請求,一種是Selenium模擬瀏覽器自動登錄,本項目選擇第二種方式登錄豆瓣網(wǎng)。第一步,找到登錄界面的網(wǎng)址,利用driver= webdriver.Chrome()啟動瀏覽器,將找到的網(wǎng)址放入driver.get()方法中;第二步,利用driver.find_element_by_xpath()方法定位到密碼登錄的位置:用f12打開開發(fā)工具,利用鼠標(biāo)點擊可以找到其位置,代碼表示為://*[@id="account"]/div[2]/div[2]/ div/div[1]/ul[1]/li[2];第三步,依次定位賬號密碼框,利用send_keys()輸入內(nèi)容,第四步,獲取登錄按鈕的位置,click()點擊登錄即完成模擬登錄。

      主要代碼為:

      #點擊密碼登陸,豆瓣登陸框默認(rèn)手機號登陸

      password_login=driver.find_element_by_xpath('//*[@id="account"]/div[2]/div[2]/div/div[1]/ul[1]/li[2]')

      password_login.click()

      #找到賬號框

      username=driver.find_element_by_css_selector('#username')

      username.click()

      username.clear()

      username.send_keys('***')

      time.sleep(2)

      #找到密碼框

      password=driver.find_element_by_css_selector('#password')

      password.click()

      password.clear()

      password.send_keys('***')

      time.sleep(2)

      #找到登錄框

      submit=driver.find_element_by_xpath('//*[@id="account"]/div[2]/div[2]/div/div[2]/div[1]/div[4]/a')

      print('準(zhǔn)備登陸...')

      submit.click()

      time.sleep(5)

      1.4 ?影評爬取

      在影評爬取之前,需要找到電影的鏈接,因為《小時代》系列電影有四部,所以考慮利用Selenium定位獲取四部電影的名字以及鏈接,在利用Selenium自動搜索電影名稱的時候,發(fā)現(xiàn)當(dāng)跳出新窗口時,driver定位的還是上一個窗口展現(xiàn)的頁面,導(dǎo)致不能正確的輸入想要的字段使得結(jié)果報錯或者元素定位錯誤,所以利用driver.window_handles[1]切換頁面句柄,讓driver自動定位到新的窗口上,最后將名字和鏈接存放在字典里一一對應(yīng)。每部電影需要爬取前500條數(shù)據(jù),每頁有20條數(shù)據(jù),則需要爬取25頁,這里涉及到翻頁處理問題,通過網(wǎng)頁鏈接的規(guī)律可知,在這25頁中,只有start的值在發(fā)生變化,則可以用循環(huán)語句來代替人工翻頁,代碼為:link=v+'comments?start={}&limit=20&status=P&sort=new_score'.format(page*20),這里的page表示0到24,v

      代表前面電影的鏈接,然后用xpath提取所需要的內(nèi)容,具體代碼為:

      l = s.get(url=link, headers=headers,proxies=proxies)

      html = l.content.decode('utf-8')

      html = etree.HTML(html, parser=etree.HTMLParser (encoding='utf-8'))

      #名字

      host = html.xpath('//span[@class="comment-info"]/a/text()')

      # 評分

      gra = html.xpath('//span[@class="comment-info"]/span[2]/@title')

      #內(nèi)容

      for c in range(1, 21):

      con=html.xpath('//*[@id="comments"]/div[{}]/div[2]/p/span/text()'.format(c))

      1.5 ?劇照爬取

      在爬取劇照時,同樣涉及到翻頁問題,網(wǎng)頁鏈接的規(guī)律與影評一致,都是只有start參數(shù)改變,可將翻頁處理寫成:url_photo=v+photos?type=S&start={}&sortby=like&size=a&subtype=a'.format(page * 30),主要代碼為:

      # 解析網(wǎng)頁

      print("開始爬取{}頁".format(page + 1))

      response = requests.get(url_photo, headers=headers,proxies=proxies)

      if response.status_code == 200:

      soup = BeautifulSoup(response.text, "lxml")

      imgTags = soup.find_all("div", attrs={"class": "cover"})

      # 獲取圖片鏈接以及名字

      for imgTag in imgTags:

      src = imgTag.img.get("src")

      name = imgTag.parent.get("data-id") + movie_name[i]

      # print(src)

      resp = requests.get(src, headers=headers,proxies=proxies)

      1.6 ?音樂爬取

      音樂與影評、劇照所不同的是,四部電影音樂總和較少,一共15條,所以不涉及翻頁處理,直接在音樂界面獲取即可,代碼為:

      def get_message(response):

      html=response.content.decode('utf-8')

      html=etree.HTML(html,parser=etree.HTMLParser (encoding='utf-8')) res_url=html.xpath(r'//*[@id="content"]/div/div[1]/div[3]/div[2]

      //a/@href')#網(wǎng)址 res_song=html.xpath(r'//*[@id="content"]/div/div[1]/div[3]/div[2]//a/text()')#歌名

      res_text=html.xpath(r'//*[@id="content"]/div/div[1]/div[3]/div[2]//p/text()')#歌曲簡介

      return res_song,res_text,res_url

      2 ?數(shù)據(jù)清洗

      在數(shù)據(jù)收集時或者收集之后需要對其進行清洗,為后續(xù)數(shù)據(jù)可視化做準(zhǔn)備,對此,本項目采用的數(shù)據(jù)清洗步驟為:

      (1)在爬取影評時,因為數(shù)據(jù)較多,循環(huán)過程中,利用xpath定位的節(jié)點位置有時會不一致:評分為空時節(jié)點位置是沒有顯示的,會導(dǎo)致抓取的元素為日期。為評分出錯,導(dǎo)致后面無法分析,在抓取時直接利用循環(huán)遍歷,將錯誤元素賦值為null,具體代碼為:

      grade = []

      for i in gra:

      if len(i) > 4:

      i = "null"

      grade.append(i)

      (2)影評主要由作者,評分和內(nèi)容三部分組成,如果內(nèi)容存在缺失,不僅會導(dǎo)致錯位,而且會導(dǎo)致最終一一對應(yīng)時報錯,則需要對每一頁內(nèi)容循環(huán)遍歷,如若為空列表,則賦值為null,具體代碼為:

      content = []

      for c in range(1, 21):

      con=html.xpath('//*[@id="comments"]/div[{}]/div[2]/p/span/text()'.format(c))

      if con == []:

      con = ['null']

      content.append(con[0])

      (3)對于爬取下來的評分等級,需要進行計數(shù)處理,方便之后的可視化展示,則需要用到pandas的value_counts()方法對等級進行計數(shù)統(tǒng)計,其方法可以自動忽略空值,并且也避免了if…else的冗余。

      3 ?數(shù)據(jù)可視化

      3.1 ?數(shù)據(jù)可視化的作用

      數(shù)據(jù)可視化的作用可以體現(xiàn)在多方面,而本項目則主要有以下三個作用,分別為:

      (1)更加直觀的參觀數(shù)據(jù),比如利用餅圖來分析評分等級,繁冗的文字?jǐn)?shù)據(jù)就被圖形替代,能直觀看到大眾對電影的評價分布。

      (2)統(tǒng)計效率更快,比如利用jieba庫分詞來統(tǒng)計詞頻,與人工統(tǒng)計相比,速度提升了不少。

      (3)更加美觀的展現(xiàn)數(shù)據(jù),在(2)的基礎(chǔ)上,如果想要統(tǒng)計出來的詞頻以特定形態(tài)呈現(xiàn)出來,那么就需要用到imageio庫,否則它的形狀就是一個普通的矩形。

      3.2 ?設(shè)計需求

      在如今的大信息時代,數(shù)據(jù)量急劇增加,數(shù)據(jù)本身的信息價值被不斷沖刷,導(dǎo)致有價值的信息被無價值的信息淹沒,所以我們需要一種更形象、具體的方式來處理這些數(shù)據(jù),使得有價值的信息被展現(xiàn)出來,而數(shù)據(jù)可視化就完全符合要求。從某種意義上來說,數(shù)據(jù)可視化就是尋找數(shù)據(jù)本身中隱藏的某種規(guī)律及現(xiàn)象,通過圖表的方式來總結(jié)復(fù)雜數(shù)據(jù),要比書面信息更利于人腦的吸收[7]。所以本項目對數(shù)據(jù)做了以下處理:

      對爬取下來的每部電影前500條,四部共2 000條短評內(nèi)容存入csv文件,然后讀取評分等級那一列數(shù)據(jù),利用pandas的value_counts()方法對五個不同的評分等級“很差、較差、還行、推薦、力薦”進行數(shù)據(jù)統(tǒng)計,由得到的統(tǒng)計數(shù)據(jù)繪制餅圖來體現(xiàn)大家對《小時代》系列的評星看法。

      運用jieba庫對爬取到的短評內(nèi)容進行詞頻統(tǒng)計,將統(tǒng)計結(jié)果存入txt文件,再利用wordcloud庫繪制詞云圖,然后用Matplotlib庫出現(xiàn)頻率排行前十的詞語做一個直方圖的繪制。

      3.3 ?相關(guān)技術(shù)

      數(shù)據(jù)可視化部分利用codecs.open(filepath,method,encoding)打開文件;jieba庫進行分詞便于后續(xù)利用wordcloud做詞云圖,利用Imageio控制詞云圖形狀。最后利用matplotlib庫做數(shù)據(jù)的條形圖draw_barh()、餅圖draw_pie()。

      3.4 ?具體實現(xiàn)

      3.4.1 ?詞頻條形圖

      利用jieba中文詞庫自動進行分詞處理,并利用Counter()方法統(tǒng)計其出現(xiàn)的次數(shù),將非中文字符的分詞刪除,將處理好的詞頻存放在文件里面并繪制頻率為前十的條形圖,條形圖的X軸設(shè)置為出現(xiàn)次數(shù),呈現(xiàn)方式如圖1所示。

      3.4.2 ?詞云圖

      為了將之前分割的詞以特定的形式呈現(xiàn)出來,需要使用一張背景圖片來加工,利用pac_mask = imageio.imread (r'xiaoshidai.png')增加一個背景圖片,并在WordCloud()中加入?yún)?shù)mask,以此可自定義繪制詞云圖,呈現(xiàn)形式如圖2所示。

      3.4.3 ?餅圖

      由數(shù)據(jù)清洗得到大眾對電影的5個等級,用這5個等級繪制出餅圖,突出顯示百分比最高的一個等級,呈現(xiàn)形式如圖3所示。

      3.5 ?可視化結(jié)論

      利用餅圖繪制評分等級后發(fā)現(xiàn)等級為“很差”的占比最多,這說明在大眾心里這一系列電影無疑是非常爛的電影,利用jieba詞庫及條形圖統(tǒng)計出來影評中高頻率詞語中有作者人名,同時他也是這系列劇的導(dǎo)演,據(jù)了解,他之前是一名青春文學(xué)作家,不少人讀過他的小說,算得上是他的粉絲,可以說名氣很大,意味著可能大部分觀眾是沖著這位名氣甚大的作家去看的;通過抓取下來的劇照可以發(fā)現(xiàn),劇中場景華麗,明星陣容超強,通過抓取下來的歌曲可以發(fā)現(xiàn),演唱者大多在當(dāng)時名氣不小,正是因為有了強大的粉絲團以及明星效應(yīng)引起的轟動,再加上小說的渲染,才成就了這系列電影的高票房。這也就是為什么如今頻繁出現(xiàn)爛片高票房的原因了。

      4 ?結(jié) ?論

      本文以豆瓣網(wǎng)站《小時代》系列電影為例,完成了對特定主題網(wǎng)絡(luò)爬蟲的數(shù)據(jù)采集、數(shù)據(jù)清洗以及數(shù)據(jù)可視化展示三部分,闡明了具體的設(shè)計背景以及設(shè)計思路,并編寫完成了數(shù)據(jù)采集、數(shù)據(jù)清洗、數(shù)據(jù)可視化三個部分的代碼。根據(jù)對系列電影影評、劇照及音樂的爬取,對其數(shù)據(jù)進行清洗并將部分?jǐn)?shù)據(jù)進行可視化分析,可以解釋部分影視作品評價不高卻任然能夠吸引觀眾去觀看。因為在爬取影評時內(nèi)容較多,雖然在代碼中加入了多線程爬蟲,但可以后期加以調(diào)試,對比得到時間花費較短的結(jié)果,以此來提高網(wǎng)絡(luò)爬蟲的效率。另外豆瓣網(wǎng)在同一賬戶登錄頻率較高時會設(shè)置滑塊驗證,本項目雖然利用了Selenium模擬瀏覽器進行自動登錄,但是不能解決滑塊驗證即還會手動點擊滑塊獲取驗證,針對這一問題,后期可以通過自主學(xué)習(xí),設(shè)計全自動化板塊,以此來消除人工參與問題,達(dá)到自動化效果,進而提升效率。

      參考文獻(xiàn):

      [1] 溫佐承,賈雪.基于Python的網(wǎng)絡(luò)爬取 [J].電腦編程技巧與維護,2020(12):23-24+32.

      [2] 趙文杰,古榮龍.基于Python的網(wǎng)絡(luò)爬蟲技術(shù) [J].河北農(nóng)機,2020(8):65-66.

      [3] 劉石磊.對反爬蟲網(wǎng)站的應(yīng)對策略 [J].電腦知識與技術(shù),2017,13(15):19-21+23.

      [4] 伏康,杜振鵬.網(wǎng)站反爬蟲策略的分析與研究 [J].電腦知識與技術(shù),2019,15(28):28-30.

      [5] 陳利婷.大數(shù)據(jù)時代的反爬蟲技術(shù) [J].電腦與信息技術(shù),2016,24(6):60-61.

      [6] 張巖.大數(shù)據(jù)反爬蟲技術(shù)分析 [J].信息系統(tǒng)工程,2018(8):130.

      [7] 朱寅非.數(shù)據(jù)可視化應(yīng)用領(lǐng)域及作用 [J].電子技術(shù)與軟件工程,2020(16):149-150.

      作者簡介:黃蓉(1999—),女,漢族,四川成都人,本科在讀,研究方向:大數(shù)據(jù)分析;毛紅霞(1981—),女,漢族,寧夏石嘴山人,副教授,碩士,研究方向:大數(shù)據(jù)、人工智能。

      猜你喜歡
      網(wǎng)絡(luò)爬蟲數(shù)據(jù)采集可視化
      數(shù)據(jù)可視化設(shè)計在美妝類APP中的應(yīng)用
      思維可視化
      復(fù)變函數(shù)級數(shù)展開的可視化實驗教學(xué)
      復(fù)變函數(shù)級數(shù)展開的可視化實驗教學(xué)
      復(fù)變函數(shù)共形映射的可視化實驗教學(xué)
      復(fù)變函數(shù)共形映射的可視化實驗教學(xué)
      煉鐵廠鐵量網(wǎng)頁數(shù)據(jù)獲取系統(tǒng)的設(shè)計與實現(xiàn)
      基于廣播模式的數(shù)據(jù)實時采集與處理系統(tǒng)
      通用Web表單數(shù)據(jù)采集系統(tǒng)的設(shè)計與實現(xiàn)
      基于開源系統(tǒng)的綜合業(yè)務(wù)數(shù)據(jù)采集系統(tǒng)的開發(fā)研究
      南郑县| 禄劝| 安岳县| 永济市| 闵行区| 玉溪市| 龙里县| 汤原县| 邵武市| 烟台市| 乳源| 富源县| 浦江县| 孝昌县| 无棣县| 翼城县| 东乡县| 丹寨县| 军事| 芷江| 东港市| 南川市| 闻喜县| 新野县| 揭西县| 古丈县| 武陟县| 都江堰市| 钦州市| 上犹县| 奉贤区| 闽侯县| 资溪县| 遵化市| 乐昌市| 石景山区| 寿阳县| 长岛县| 安远县| 蚌埠市| 会同县|