自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

牛刀小試-《你好,李煥英》影評詞云

大數(shù)據(jù) 數(shù)據(jù)可視化
最近,賈玲導演的電影《你好,李煥英》在春節(jié)檔一眾電影中脫穎而出,成為了一匹黑馬,更是中國影史上第三部票房破50億的電影。我們從豆瓣上看到,該影片當前評分是8.1分,接近30%的評價都是5顆星。今天我們就來從豆瓣上爬取一部分影評,結(jié)合jieba和pyecharts做個分詞和詞云圖。

 最近,賈玲導演的電影《你好,李煥英》在春節(jié)檔一眾電影中脫穎而出,成為了一匹黑馬,更是中國影史上第三部票房破50億的電影。


我們從豆瓣上看到,該影片當前評分是8.1分,接近30%的評價都是5顆星。今天我們就來從豆瓣上爬取一部分影評,結(jié)合jieba和pyecharts做個分詞和詞云圖。


打開開發(fā)者工具

首先,在豆瓣上找到電影《你好,李煥英》,下拉到影評區(qū),可以看到共有三十多萬條短評和七千多影評。短評數(shù)量太多了,我們還是數(shù)量較少的影評下手吧。接下來,在瀏覽器中按F12或者右鍵點擊檢查打開開發(fā)者工具,然后選擇network(網(wǎng)絡)選項,然后點擊上圖中影評區(qū)的“全部7494條”,就可以在開發(fā)者工具中看到一系列的請求。


尋找目標URL


將影評區(qū)拖到最底部,將會看到影評被分成來幾百個頁面,然后我們清空開發(fā)者工具中的捕獲的請求,點擊下一頁,在請求列表中找到第一條,這就是我們翻頁的通用請求了:每頁20條,使用start參數(shù)判斷起始位置,這樣循環(huán)300多次就可以獲取到全部的影評了。

等等,貌似還少了什么?由于影評內(nèi)容較長,評論只顯示了一部分,要想看到全部內(nèi)容,還需要點擊一下展開全文。

點一下展開,發(fā)現(xiàn)瀏覽器發(fā)出一條這樣的請求,剛好返回的json就是完整的評論內(nèi)容。依次點擊后面的幾條影評,也都是同樣格式的請求,只有full前面的數(shù)字發(fā)生了變化,可以斷定這串數(shù)字就是這條影評的id了。那么如何知道每一條影評的id是什么呢?

檢查目標元素

鼠標放到展開按鈕上,右鍵點擊檢查元素,我們可以發(fā)現(xiàn),頁面上的每一條影評都對應了一個div,這個div有一個data-cid的參數(shù),它的值剛好就是上面我們請求中的id,所以我們只要在每次請求頁面時,遍歷review-list中所有的div,獲取到data-cid的值,再把影評id循環(huán)代入到上面的url中請求完整影評內(nèi)容即可。

爬取完影評評論并保存到本地,然后使用jieba分詞將評論文章分割成單詞,然后去除停用詞并統(tǒng)計詞頻。

大功告成

最后一步就是利用我們前面提到的pyecharts中的wordcloud來制作詞云了。選擇一張照片作為詞云的形狀,然后導入單詞及其詞頻作為權(quán)重,輸出文件即可。

 

(圖片來源于網(wǎng)絡,侵刪)

詳細代碼:

  1. import requests 
  2. import random, time, json 
  3. from bs4 import BeautifulSoup as bs 
  4. import jieba 
  5. import pandas as pd 
  6. from pyecharts import charts, options 
  7.  
  8. url1 = 'https://movie.douban.com/subject/34841067/reviews?start={}' 
  9. url2 = 'https://movie.douban.com/j/review/{}/full' 
  10. header = '''Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 
  11. Accept-Encoding: gzip, deflate, br 
  12. Accept-Language: zh-CN,zh;q=0.9 
  13. Connection: keep-alive 
  14. Cookie: bid=RWSCuDu3-hA; douban-fav-remind=1; __gads=ID=f22d1fef6a644a7a-228e1b3a32c50048:T=1607935481:RT=1607935481:S=ALNI_MZwRU5qCsyehoDFgRdf7D5PRBqqCg; ll="108288"; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1614764251%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DlzDNd94NFnBQCDIqNI00Il5NwjZoARpWz1lQy5MGKdL26rV5yrb1N1HIoGzoKu5k%26wd%3D%26eqid%3Dda5556d4000016f000000003603f58d7%22%5D; ap_v=0,6.0; __utmc=30149280; __utmz=30149280.1614764252.6.6.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utma=223695111.1843127241.1614764252.1614764252.1614764252.1; __utmc=223695111; __utmz=223695111.1614764252.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __yadk_uid=rcNjENFDHY62mSmlZqJtXPKJZUfQkM75; _vwo_uuid_v2=D771633F1FBA119FD38FD79DCE082F26D|35b2c7beff079fe25b62163affe94ce8; _pk_id.100001.4cf6=2e0a301ce93b85e0.1614764251.1.1614764408.1614764251.; __utma=30149280.1170719909.1607935481.1614764252.1614766647.7; __utmt=1; __utmb=30149280.2.9.1614766647; dbcl2="152966201:ETujHWfkU2g"; ck=1WtR 
  15. Host: movie.douban.com 
  16. Referer: https://accounts.douban.com/ 
  17. Sec-Fetch-Dest: document 
  18. Sec-Fetch-Mode: navigate 
  19. Sec-Fetch-Site: same-site 
  20. Sec-Fetch-User: ?1 
  21. Upgrade-Insecure-Requests: 1 
  22. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36''
  23. headers = {x.split(': ')[0]: x.split(': ')[1] for x in header.split('\n')} 
  24. session = requests.session() 
  25. session.headers = headers 
  26. result1 = [] 
  27. for i in range(0, 365): 
  28.     print(i) 
  29.     try: 
  30.         r = session.get(url1.format(i)) 
  31.         r.close() 
  32.         content = bs(r.text) 
  33.         result1.extend(x.get('data-cid'for x in content.select('div.review-list > div')) 
  34.     except
  35.         pass 
  36.     time.sleep(random.randrange(3, 20)) 
  37.  
  38. result2 = [] 
  39. for j in result1: 
  40.     print(result1.index(j)) 
  41.     try: 
  42.         r = session.get(url2.format(j)) 
  43.         r.close() 
  44.         data = json.loads(r.text) 
  45.         result2.append(data) 
  46.     except
  47.         pass 
  48.     time.sleep(random.randrange(10, 20)) 
  49.  
  50. review = [] 
  51. for i in result2: 
  52.     html = bs(i['html']) 
  53.     review.append(html.text) 
  54. for i in ['賈玲''賈曉玲''沈騰''張小斐''李煥英''光林''陳赫''沈光林''冷特']: 
  55.     jieba.add_word(i) 
  56. words = [] 
  57. for x in review: 
  58.     cut = jieba.lcut(x) 
  59.     words.extend(cut) 
  60.  
  61. with open('stopwords.txt''r')as f: 
  62.     stop = [x.strip() for x in f.readlines()] 
  63.     f.close() 
  64. df = pd.DataFrame(words, columns=['words']) 
  65. df_count = pd.DataFrame(df.groupby('words').size()) 
  66. count = df_count.loc[[x for x in df_count.index.values if x not in stop]].sort_values(0, ascending=False
  67. cloud = charts.WordCloud(init_opts=options.InitOpts(width='2000px', height='2000px')) 
  68. cloud.add('你好,李煥英'
  69.           data_pair=[(x, count.loc[x].values[0] / 100) for x in count.index.values], 
  70.           mask_image='jialing.jpeg'
  71.           word_size_range=[10, 300]) 
  72. cloud.render('你好李煥英.html'

 

責任編輯:姜華 來源: 數(shù)師兄
相關(guān)推薦

2014-06-06 13:42:26

iOS 8QR CodeWWDC2014

2012-05-03 10:24:02

ApacheMINAJava

2010-03-05 17:25:07

sharepoint

2011-11-30 16:02:13

筆記本評測

2017-04-11 20:49:02

機器學習大數(shù)據(jù)數(shù)據(jù)分析

2021-03-11 09:30:19

互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)

2021-03-04 09:35:15

電影騰訊微視

2014-12-16 15:10:32

APC BR1000G后備式UPS電源

2021-01-08 09:07:19

Scrapy框架爬蟲

2017-05-04 21:15:30

Android分辨率

2012-02-24 10:48:56

語盒開源

2021-05-20 07:56:35

Bean容器Spring

2023-10-07 08:59:02

2022-07-04 23:24:28

sql優(yōu)化監(jiān)控

2018-08-02 14:12:16

影評分析狄仁杰之四大天王

2018-01-01 23:02:56

2012-11-09 16:51:41

阿里云開發(fā)者開發(fā)

2025-03-21 09:00:00

2023-04-20 17:41:38

開源清華
點贊
收藏

51CTO技術(shù)棧公眾號