旅遊推薦系統畢業設計總結(包含旅遊信息爬取、算法應用和旅遊推薦系統實現)

哇塞,大學本科四年的時光就這樣結束了,雖然做畢設的整個過程並不是特別煎熬,也沒有像別人一樣熬夜寫代碼,但是通過畢設我確實瞭解很多計算機相關知識,現在進行一個簡單的總結:

 

目錄

瞭解基於django的web開發

學會了python的基本使用,包含其中的numpy、pandas、jieba、sqlite、re等各式各樣的庫

開始接觸算法的應用和創新,在畢設設計到了TF-IDF算法、樸素貝葉斯分類、蟻羣算法

學會了網絡爬蟲,本次畢設使用的是beautifulsoup4v​

接觸了數據挖掘、基於內容的推薦


現在目錄上的章節如果有時間會進行詳細的文章編寫,目前暫時只完成了網絡爬蟲部分。

瞭解基於django的web開發

由於本次在研究中需要對模型的應用進行一個更好的可視化展示效果,我做了兩個簡單的開發界面,第一個是旅遊界面的推薦,第二個是推薦後得到的結果。

  1. 在做界面的時候主要是體驗了一下循環渲染吧。{% %}
  2. 使用了json做了一下前後端數據的傳輸
  3. 使用ajax做了異步傳輸
  4. 還有如何快速獲取網頁的代碼,當然這個只適用於日常的學習和研究。
  5. 模型的實現和應用

 

學會了python的基本使用,包含其中的numpy、pandas、jieba、sqlite、re等各式各樣的庫

自從使用了python以後,才發現python是真的很好用哈,基本可以使用python進行編程了。

  1. 瞭解到python中的字典、元組的使用並不侷限於一維的方法,並能結合字典和元組一起使用。
  2. 在django開發中理解了class的使用和函數的定義和引用
  3. jieba用來處理的分詞效果是真的很好哦
  4. numpy用來數據和矩陣的處理,真的很方便,基本上和pandans、matplotlib一起使用了
  5. 接觸了一種新的數據庫sqlite,瞭解了基本的增刪改查。
  6. 接觸到正則表達式,主要用了信息提取和信息刪除
  7. 還有如何創建csv文件、遍歷文件
  8. 接觸到一種新的庫管理工具homebrew

開始接觸算法的應用和創新,在畢設設計到了TF-IDF算法、樸素貝葉斯分類、蟻羣算法

  1. 我使用TF-IDF是進行的關鍵詞提取
  2. 使用樸素貝葉斯來進行景點分類
  3. 使用蟻羣算法用來進行景點的路徑規劃

這些算法還是真的神奇,佩服數學的神奇!

學會了網絡爬蟲,本次畢設使用的是beautifulsoup4

第一次爬蟲額,成功的爬取到了攜程網的酒店、景點、美食信息。

其中本次爬蟲的主要思想是:首先是找到攜程網url的編寫規律,然後根據規律使用beautifulsoup4對所需的html語言中的信息提取,最後就是封裝處理。

如下是我爬取美食的代碼,貌似景點和酒店已經我寫的代碼已經爬不了了。其具體代碼在使用python爬取攜程網旅遊信息(包含景點、酒店、美食)

# -*- coding: utf-8 -*-
import requests
import io
from bs4 import BeautifulSoup as BS
import time
import re

"""從網上爬取數據"""

headers = {
"Origin": "https://piao.ctrip.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}
places=["beijing1","shanghai2","changsha148","sanya61","chongqing158","hongkong38","chengdu104","haerbin151",
"xian7","guangzhou152","hangzhou14"]
placenames=["北京","上海","長沙","三亞","重慶","香港","成都","哈爾濱","西安","廣州","杭州"]

places=["changsha148"]
placenames=["長沙"]

base="https://you.ctrip.com/fooditem/";
base2="https://you.ctrip.com";
requestlist=[]

for j in range(len(places)):  #爬取對應的特色菜
	requestlist.append({"url":base+places[j]+".html","place":placenames[j]})
	for i in range(2,2):
		tmp=base+places[j]+"/s0-p"+str(i)+".html"
		requestlist.append({"url":tmp,"place":placenames[j]});
#對應的url地址和所查詢的位置
print(requestlist)
l=[]
count=1;
for i in range(len(requestlist)):
	response = requests.get(requestlist[i]["url"], headers=headers)
	#print(response)
	html=response.text
	#print(html)
	soup=BS(html,'html.parser')
	vs=soup.find_all(name="div",attrs={"class":"rdetailbox"})
	print("len(vs)",len(vs))
	for j in range(len(vs)):
		print("正在打印的條數:",j)
		try:
			#獲取子網頁鏈接地址
			href=vs[j].find(name="a",attrs={"target":"_blank"}).attrs["href"];

			#print("href",href)
			# 再次請求子網頁,獲取景點詳細信息
			res = requests.get(base2+href, headers=headers)
			print("當前訪問的網址:",base2+href)
			with open("3.html","w",encoding="utf-8") as f:
				f.write(res.text)
			soupi = BS(res.text,"html.parser") #該網頁的html代碼
			#print(soupi)
			vis = soupi.find_all(name="li",attrs={"class":"infotext"}); #獲取此時的dom文件位置所在
			#print(vis)
			introduce=[]
			for i in range(len(vis)):
				introduce.append(vis[i].get_text())
			imgs=[];
			imglinks=soupi.find_all(name="a",attrs={"href":"javascript:void(0)"})
			#print(imte)
			# print(imglinks)
			# print(type(imglinks))
			#for img in imte:
				#imgs.append(img.attrs["src"])
			tmp={};
			tmp["id"]=count;
			tmp["name"]=vs[j].find(name="a",attrs={"target":"_blank"}).string;
			tmp["name"]=tmp["name"].replace(" ","").replace("\n","");
			tmp["introduce"]=introduce
			tmp["img"]=imglinks
			tmp["city"]=requestlist[i]["place"]
			count=count+1;
			l.append(tmp);
			time.sleep(1);
		except Exception as e:
			print(e)
			pass
		#print ("打印tmp",tmp)
		# with open("datap/"+tmp["name"]+".pk",'wb') as f:
		# 	pickle.dump(tmp,f);

		with io.open("/Users/hujinhong/PycharmProjects/untitled5/food/changsha/"+tmp["name"]+".txt",'w',encoding="utf-8") as f:
			f.write(str(tmp))
#print(l)
for i in l:
	print((i))
# # browser.close()#關閉瀏覽器
# with open("data2.txt",'w',encoding='utf-8') as f:
# 	f.write(str(l))
# with open("data2.pk","w",encoding="utf-8") as f:
# 	pickle.dump(l,f);
#https://hotels.ctrip.com/hotel/qingdao7/star2/k1%E4%BA%94%E5%9B%9B%E5%B9%BF%E5%9C%BA#ctm_ref=ctr_hp_sb_lst

所以爬蟲還是挺有意思的。

接觸了數據挖掘、基於內容的推薦

這兩個話題雖然比較大,但是我還是想簡單說一下自己的理解

  1. 數據挖掘的主要是最有用信息的一個提取,而我此次做的我覺得跟和機器學習相關聯,因爲是一個自動學習的過程。
  2. 然後基於內容的推薦,跟需要的自身含有的數據量,數據越多可能得到的結果會跟好,但是過多過少都會影響結果的正確性,過少的話會導致信息的特徵少,過多的話會導致特徵太過於負責,並且基於內容的推薦是不能挖掘用戶的潛在信息的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章