網(wǎng)絡(luò)空間安全概論 實(shí)驗(yàn)7網(wǎng)絡(luò)爬蟲 基于豆瓣長(zhǎng)影評(píng)的內(nèi)容推_第1頁(yè)
網(wǎng)絡(luò)空間安全概論 實(shí)驗(yàn)7網(wǎng)絡(luò)爬蟲 基于豆瓣長(zhǎng)影評(píng)的內(nèi)容推_第2頁(yè)
網(wǎng)絡(luò)空間安全概論 實(shí)驗(yàn)7網(wǎng)絡(luò)爬蟲 基于豆瓣長(zhǎng)影評(píng)的內(nèi)容推_第3頁(yè)
網(wǎng)絡(luò)空間安全概論 實(shí)驗(yàn)7網(wǎng)絡(luò)爬蟲 基于豆瓣長(zhǎng)影評(píng)的內(nèi)容推_第4頁(yè)
網(wǎng)絡(luò)空間安全概論 實(shí)驗(yàn)7網(wǎng)絡(luò)爬蟲 基于豆瓣長(zhǎng)影評(píng)的內(nèi)容推_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

#爬取某篇電影下的評(píng)論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庫(kù)

title

=

soup.title.string

#獲取網(wǎng)頁(yè)標(biāo)題,得到評(píng)論數(shù)以及電影名

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

('該電影的評(píng)論數(shù)為'+title[flag1+1:flag2])

reviewer_id=[]

#用戶id

review_level=[]

#評(píng)價(jià)等級(jí)

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)

#爬出評(píng)價(jià)等級(jí)

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':

#經(jīng)過(guò)研究如果用戶沒(méi)有給評(píng)價(jià)就會(huì)具有這個(gè)特征

review_level.append('無(wú)評(píng)價(jià)')

else

:

review_level.append(review_level_1['title'])

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

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

#爬取評(píng)論文章的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]+'

評(píng)價(jià):'+review_level[i]+'

詳細(xì)評(píng)價(jià)文章url的id

:'+review_detailed_id[i])

#爬取5篇該電影下的詳細(xì)文章for

i

in

range(0,5):

print

('正在爬取第

'+str(i+1)+'

篇詳細(xì)評(píng)論')

html_detail

=

get_movie_full_review(review_detailed_id[i])

#爬取評(píng)論細(xì)節(jié)

#print

(html_detail.text)

html_detail

=

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

soup_review

=

BeautifulSoup(html_detail,

'lxml')

#使用soup庫(kù)

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:

#把標(biāo)題和評(píng)論細(xì)節(jié)一起爬下來(lái),然后都添加在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.文章結(jié)構(gòu)化首先根據(jù)之前爬取的評(píng)論,統(tǒng)計(jì)爬取的全部評(píng)論的TD-IDF前10的關(guān)鍵詞,作為關(guān)鍵詞列表。(這里的TD-IDF是使用的結(jié)巴分詞自帶的預(yù)料庫(kù),根據(jù)我的測(cè)試,提取出來(lái)的關(guān)鍵詞很符合文章特征)然后根據(jù)各個(gè)評(píng)論詞頻前10的關(guān)鍵詞進(jìn)行對(duì)比,取具有相同關(guān)鍵詞的詞頻作為關(guān)鍵詞矩陣的向量,這里只爬取5篇評(píng)論,制作出來(lái)的矩陣如下,這里取之前爬取的評(píng)價(jià)星級(jí)作為最后一個(gè)向量參數(shù)。 以上面爬取的《哆啦a夢(mèng),伴我同行》這部電影形成的文章關(guān)鍵詞矩陣如下圖7關(guān)鍵詞矩陣計(jì)算關(guān)鍵詞的矩陣的部分代碼,使用之前爬取評(píng)論時(shí)創(chuàng)建的分詞字典

jvzhen_list=[[0]

*

11

for

i

in

range(5)]

#創(chuàng)建的臨接矩陣值

'''

list_fenci

0.第幾個(gè)評(píng)論

1.評(píng)論關(guān)鍵詞

2.評(píng)論關(guān)鍵詞頻率

review_fenci_all_list

0.總評(píng)論關(guān)鍵詞

1.關(guān)鍵詞頻率

'''

flag_pinlun=0

for

z

in

range

(0,5):

#表示第幾個(gè)評(píng)論

for

j

in

range

(0,10):

#表示矩陣的列(第z個(gè)評(píng)論的詞頻)

#jvzhen_list[z].append(0)

#先填充0

for

i

in

range

(0,10):

#循環(huán),與總詞頻率對(duì)比

#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)

#把之前爬取的評(píng)價(jià)加入臨接矩陣

'''

力薦=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計(jì)算相似度矩陣 得到文章的關(guān)鍵詞向量矩陣后,通過(guò)余弦計(jì)算公式計(jì)算每個(gè)關(guān)鍵詞向量的相似度圖8余弦公式根據(jù)上面爬出來(lái)的數(shù)據(jù),計(jì)算得出的評(píng)論相似度矩陣如下圖9根據(jù)余弦公式計(jì)算的相似度矩陣部分代碼如下

#創(chuàng)建相似度的矩陣,循環(huán)計(jì)算余弦相似度

cos_jvzhen=[[0]

*

5

for

i

in

range(5)]

for

i

in

range(0,5):

#表示第幾個(gè)評(píng)論和第j個(gè)評(píng)論的相似度

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用戶矩陣由于我不能獲取豆瓣用戶的詳細(xì)操作數(shù)據(jù),所以用戶矩陣只能我自己進(jìn)行模擬,然后根據(jù)用戶的評(píng)分進(jìn)行推薦度計(jì)算,這里由于豆瓣的影評(píng)只有“有用”和“沒(méi)用”2種,這里設(shè)有用為1,沒(méi)用為-1,沒(méi)看過(guò)該影評(píng)為0,模擬5個(gè)用戶的評(píng)價(jià)創(chuàng)建一個(gè)矩陣。圖10模擬的用戶矩陣3.4計(jì)算推薦度根據(jù)下面這個(gè)公式計(jì)算每個(gè)用戶沒(méi)看過(guò)影評(píng)與其看過(guò)影評(píng)的相似度的權(quán)值計(jì)算出用戶沒(méi)看過(guò)影評(píng)的相似度,然后再進(jìn)行排序,得出推薦影評(píng)論列表沒(méi)看過(guò)影評(píng)的推薦度=(與每個(gè)看過(guò)影評(píng)的相似度部分代碼如下#計(jì)算推薦度

tuijian=[[]

for

i

in

range(5)]

#創(chuàng)建推薦度的列表

for

z

in

range(0,5):

#表示用戶矩陣

for

i

in

range(0,5):

#看第幾個(gè)評(píng)論為0

if

user_jvzhen[z][i]

==

0:

#print

(i)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論