網絡空間安全概論 實驗7網絡爬蟲 基于豆瓣長影評的內容推_第1頁
網絡空間安全概論 實驗7網絡爬蟲 基于豆瓣長影評的內容推_第2頁
網絡空間安全概論 實驗7網絡爬蟲 基于豆瓣長影評的內容推_第3頁
網絡空間安全概論 實驗7網絡爬蟲 基于豆瓣長影評的內容推_第4頁
網絡空間安全概論 實驗7網絡爬蟲 基于豆瓣長影評的內容推_第5頁
已閱讀5頁,還剩9頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

中國礦業大學計算機學院2018級本科生課程報告課程名稱信息內容安全報告題目基于豆瓣長影評的內容推薦報告時間2021.7.6姓名周宗文學號08182901任課教師曹天杰2020-2021(二)《信息內容安全》課程報告評分表序號畢業要求課程教學目標考查方式與考查點占比得分12.3目標1:掌握信息內容安全的基本概念、分類、原理和相關技術,能夠根據課程基本知識對信息內容安全領域出現的問題進行歸類、分析、并有初步分析和解決問題的能力。通過課堂講授和課堂研討掌握信息內容安全概念和理論知識。40%3.2目標2:掌握信息內容安全處理相關的理論、技術以及健全的評價體系,能夠根據具體問題分析算法、設計算法、實現算法并能綜合評價算法。24.3目標3:掌握信息內容安全的基礎知識,針對具體問題和要求選擇正確的技術路線,通過在實驗環境中進行仿真實驗并能根據算法特點進行攻擊測試和綜合性能評價,得到具有參考價值的結論。課程報告;實現有關信息內容安全的一個軟件系統。分析和對比各項技術,選擇相應的技術進行算法設計并在實驗環境中進行仿真實驗和性能評價,得到有效結論。60%總分100%評閱人:2021年7月10日目錄報告摘要 4報告正文 51.程序流程 52.爬蟲部分 62.1分析和爬取豆瓣電影長評頁面 62.2爬取豆瓣詳細評論 72.3應對反爬蟲措施 82.4爬蟲部分代碼 83.推薦部分 103.1.文章結構化 103.2計算相似度矩陣 123.3用戶矩陣 123.4計算推薦度 134.實現效果 13報告摘要關鍵詞:豆瓣長影評;爬蟲;影評推薦;基于內容的推薦;根據在課堂上所學的內容,觀察豆瓣長影評論頁面的特征,編寫了一個爬蟲實現可以自動爬取豆瓣某一電影下的所有長影評,實現對這些評論的分析,根據TD-IDF算法提取關鍵詞作為特征向量,計算各文章的相似度,最終實現對用戶推薦用戶沒有看過的,推薦度高的文章。

報告正文程序流程根據課堂上所學的知識,以及我的理解,我設計的程序流程是這樣的圖1程序流程圖以上就是我設計的程序流程。接下來就解析各部分的實現過程,這里簡化了程序,這個程序只爬取5篇評論,提取前10個關鍵詞進行相似度矩陣的計算,然后隨機生成5個用戶的用戶矩陣進行推薦度計算,然后根據計算出來的推薦值的大小,給用戶進行推薦。2.爬蟲部分2.1分析和爬取豆瓣電影長評頁面首先構造url,觀察豆瓣的長影評基本都是/subject/+電影id+/reviews?start=,start值為評論頁數,這種格式,構造url把電影頁面的html文件爬取下來,分析我們要爬取的內容所在的元素。圖2豆瓣電影頁面例如這個頁面,它是不顯示這篇文章的詳細內容的,只有一個展開,我們爬下它的html頁面進行分析圖3需要爬取的標簽對于在這個頁面的評論,我只爬取每個評論下的<ahref="/people/204500361/"class="name">夏風已至</a><h2><ahref="/review/13611559/">后半段高潮迭起</a></h2><spanclass="allstar40main-title-rating"title="推薦"></span>這幾個標簽,代表評價的用戶名,文章具體鏈接,以及對這個電影的評價,這里評價會在之后作為文章的特征向量,文章具體鏈接用于再次構造請求爬取具體整篇文章。這里有一個特殊的地方,就是豆瓣長評可能會有無評價等級的評論,就是沒有<spanclass="allstar40main-title-rating"title="推薦"></span>這項標簽,會對我們的爬蟲,對應每個評論的信息有影響,通過分析,這種評論一般會帶有<spancontent="2021-06-14"class="main-meta">這樣的標簽,通過檢測這個標簽,就可以知道有那個評論說沒有給出評價等級的。爬取效果如下圖4爬取電影評論頁面效果2.2爬取豆瓣詳細評論 根據爬取的文章id構造/review/文章id,進行請求,根據爬取下來的html進行分析(圖5),我們需要爬取<divclass="review-contentclearfix"data-author=""data-url=""data-original="0">這個html標簽下的內容,就是完整文章,爬取完整的文章然后進行詞頻統計,去除停止詞后通過TD-IDF算法提取關鍵詞,并且通過結巴分詞存儲詞頻,形成一個詞頻詞典,作為文章結構化時的特征向量。圖5html分析圖6爬取每篇評論的效果2.3應對反爬蟲措施豆瓣的影評經過我多次爬取,貌似沒有什么反爬蟲措施,這里使用了fake_useragent這個庫,隨機生成瀏覽器的ua放在請求頭中,每次使用一個隨機的ua進行請求。然后利用不同的cookie進去請求。2.4爬蟲部分代碼

#爬取某篇電影下的評論html

=

get_movie_html(34913671,0)

html1

=

html.text.encode(encoding="utf-8")

#print

(type(html1))

#print

(html1)

#file

=

open(r"J:\\vscode\爬蟲\test.txt",

"w+b")

#file.write(html1)

soup

=

BeautifulSoup(html.text,

'lxml')

#使用soup庫

title

=

soup.title.string

#獲取網頁標題,得到評論數以及電影名

title

=

title.replace('

',

'')

title

=

title.replace('\n',

'')

len_title

=

len(title)

for

i

in

range

(0,len_title):

if(title[i]

==

'('):

flag1=i

if(title[i]

==

')'):

flag2=i

#print(str(flag1)+'

'+str(flag2))

movie_name

=

title[0:flag1-3]

print

('電影名:'+

movie_name)

print

('該電影的評論數為'+title[flag1+1:flag2])

reviewer_id=[]

#用戶id

review_level=[]

#評價等級

review_detailed_id=[]

#文章id

reviewer_ids=soup.find_all('a',class_="name")

for

reviewer_id_1

in

reviewer_ids:

#爬出用戶

reviewer_id.append(reviewer_id_1.text)

#print(reviewer_id_1.text)

#爬出評價等級

review_levels=soup.find_all('header',class_="main-hd")

'''

力薦=5星

推薦=4星

還行=3星

較差=2星

很差=1星

'''

for

review_level_1

in

review_levels:

review_level_1=review_level_1.find('span')

if

review_level_1['class'][0]

==

'main-meta':

#經過研究如果用戶沒有給評價就會具有這個特征

review_level.append('無評價')

else

:

review_level.append(review_level_1['title'])

#print(review_level_1['class'][0])

review_detailed_ids=soup.find_all('div',class_="review-short")

#爬取評論文章的id

for

review_detailed_ids_1

in

review_detailed_ids:

review_detailed_id.append(review_detailed_ids_1['data-rid'])

#print(review_detailed_ids_1['data-rid'])

for

i

in

range(0,10):

print

(reviewer_id[i]+'

評價:'+review_level[i]+'

詳細評價文章url的id

:'+review_detailed_id[i])

#爬取5篇該電影下的詳細文章for

i

in

range(0,5):

print

('正在爬取第

'+str(i+1)+'

篇詳細評論')

html_detail

=

get_movie_full_review(review_detailed_id[i])

#爬取評論細節

#print

(html_detail.text)

html_detail

=

html_detail.text.encode(encoding="utf-8")

soup_review

=

BeautifulSoup(html_detail,

'lxml')

#使用soup庫

review_alls=soup_review.find_all('div',class_="review-content

clearfix")

review_all_title=soup_review.find('meta',property="og:title")

movie_review_title.append(review_all_title['content'])

movie_full_review_all.append(review_all_title['content'])

#print

(review_all_title['content'])

for

review_all

in

review_alls:

#把標題和評論細節一起爬下來,然后都添加在review_fenci_all中

'''title_de

=

soup_review.title.string

title_de

=

title_de.replace('

',

'')

title_de

=

title_de.replace('\n',

'')'''

#print

(title_de)

#print

(review_all.text)

#movie_full_review_all.append(title_de)

movie_full_review_all[i]

+=

''

movie_full_review_all[i]

+=

review_all.text

#print

(movie_full_review_all[i])

list_fenci.append(fenci_plv(movie_full_review_all[i]))

print

("詞典已記錄")

review_fenci_all+=movie_full_review_all[i]3.推薦部分3.1.文章結構化首先根據之前爬取的評論,統計爬取的全部評論的TD-IDF前10的關鍵詞,作為關鍵詞列表。(這里的TD-IDF是使用的結巴分詞自帶的預料庫,根據我的測試,提取出來的關鍵詞很符合文章特征)然后根據各個評論詞頻前10的關鍵詞進行對比,取具有相同關鍵詞的詞頻作為關鍵詞矩陣的向量,這里只爬取5篇評論,制作出來的矩陣如下,這里取之前爬取的評價星級作為最后一個向量參數。 以上面爬取的《哆啦a夢,伴我同行》這部電影形成的文章關鍵詞矩陣如下圖7關鍵詞矩陣計算關鍵詞的矩陣的部分代碼,使用之前爬取評論時創建的分詞字典

jvzhen_list=[[0]

*

11

for

i

in

range(5)]

#創建的臨接矩陣值

'''

list_fenci

0.第幾個評論

1.評論關鍵詞

2.評論關鍵詞頻率

review_fenci_all_list

0.總評論關鍵詞

1.關鍵詞頻率

'''

flag_pinlun=0

for

z

in

range

(0,5):

#表示第幾個評論

for

j

in

range

(0,10):

#表示矩陣的列(第z個評論的詞頻)

#jvzhen_list[z].append(0)

#先填充0

for

i

in

range

(0,10):

#循環,與總詞頻率對比

#print

(review_fenci_all_list[j][0])

#print

(list_fenci[0][i][0]+'\n')

if

list_fenci[z][i][0]

==

review_fenci_all_list[j][0]:

jvzhen_list[z][j]

=

round(list_fenci[z][i][1],2)

#print

(1)

#print

(jvzhen_list)

#把之前爬取的評價加入臨接矩陣

'''

力薦=5星

推薦=4星

還行=3星

較差=2星

很差=1星

'''

for

i

in

range(0,5):

#print

(jvzhen_list[i][10])

if

review_level[i]

==

"力薦"

:

jvzhen_list[i][10]

=

5

elif

review_level[i]

==

"推薦"

:

jvzhen_list[i][10]

=

4

elif

review_level[i]

==

"還行"

:

jvzhen_list[i][10]

=

3

elif

review_level[i]

==

"較差"

:

jvzhen_list[i][10]

=

2

elif

review_level[i]==

"很差"

:

jvzhen_list[i][10]

=

1

else:

jvzhen_list[i][10]

=

03.2計算相似度矩陣 得到文章的關鍵詞向量矩陣后,通過余弦計算公式計算每個關鍵詞向量的相似度圖8余弦公式根據上面爬出來的數據,計算得出的評論相似度矩陣如下圖9根據余弦公式計算的相似度矩陣部分代碼如下

#創建相似度的矩陣,循環計算余弦相似度

cos_jvzhen=[[0]

*

5

for

i

in

range(5)]

for

i

in

range(0,5):

#表示第幾個評論和第j個評論的相似度

for

j

in

range(0,5):

cos_jvzhen[i][j]

=

round(cosine_similarity(np.array(jvzhen_list[i]),np.array(jvzhen_list[j])),2)3.3用戶矩陣由于我不能獲取豆瓣用戶的詳細操作數據,所以用戶矩陣只能我自己進行模擬,然后根據用戶的評分進行推薦度計算,這里由于豆瓣的影評只有“有用”和“沒用”2種,這里設有用為1,沒用為-1,沒看過該影評為0,模擬5個用戶的評價創建一個矩陣。圖10模擬的用戶矩陣3.4計算推薦度根據下面這個公式計算每個用戶沒看過影評與其看過影評的相似度的權值計算出用戶沒看過影評的相似度,然后再進行排序,得出推薦影評論列表沒看過影評的推薦度=(與每個看過影評的相似度部分代碼如下#計算推薦度

tuijian=[[]

for

i

in

range(5)]

#創建推薦度的列表

for

z

in

range(0,5):

#表示用戶矩陣

for

i

in

range(0,5):

#看第幾個評論為0

if

user_jvzhen[z][i]

==

0:

#print

(i)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論