【《基于Python爬虫的旅游信息平台的设计与实现》9500字】_第1页
【《基于Python爬虫的旅游信息平台的设计与实现》9500字】_第2页
【《基于Python爬虫的旅游信息平台的设计与实现》9500字】_第3页
【《基于Python爬虫的旅游信息平台的设计与实现》9500字】_第4页
【《基于Python爬虫的旅游信息平台的设计与实现》9500字】_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

[16]。然后倒排序,当用户感兴趣产品数量比较大的时候,将所有产品推荐给目标用户是不切实际的。这时候,就要规定推荐的产品数量本系统获取前N个感兴趣度最高的旅游产品推荐给目标用户。图3.4Top-N推荐运行结果

4系统分析与设计4.1系统需求分析互联网技术的飞速发展,每天各种纷繁复杂的旅游信息层出不穷。人们应该获取到自己跟刚兴趣的旅游信息?本文所设计的旅游推荐系统就旨在解决目前存在的该问题。本系统是Python爬虫进行数据采集,基于内容推荐算法来实现的旅游推荐系统。用户例用图如图4.1所示。图4.1用例图本节主要从系统的功能性需求性需求进行分析,系该系统所要实现的需求主要包括以下两部分。数据采集。这部分需要解决的是数据来源问题,依靠Selenium框架来获取网站的信息,再进行数据清洗,数据加工,筛选能为本设计所用的数据。整理出的数据内容主应该包括:旅游景点、景点名称、来源地址、店铺、已售、价格等。旅游界面展示。根据用户的需求可知,需要实现推荐系统功能模块有四个。用户信息功能;运用推荐算法实现的核心功能“猜你喜欢”推荐;分类信息展示,这里包括用户评分、评论、收藏功能;景点搜索功能。4.2系统方案设计4.2.1系统总体架构从系统总体构架看,可以把本设计分为三层,分别是前端应用层、后端逻辑处理层和数据层。前端浏览器通过Bootstrap框架实现的浏览器页面展示。通过html、css等文件来和用户交互,显示旅游景点信息。前端应用层和数据层通过Django框接口连接,Web服务器处理用户请求,从而实现系统功能逻辑处理。数据层是MySQL据库。数据库存储马蜂窝旅游网爬取旅游数据,经过数据清洗、重组后的旅游信息,以及系统用户的评分记录、评论记录、用户信息。B/S体系是本设计采用的结构。用户浏览器访问平台,通过搜索、评分等操作向Web服务器提交请求,Web服务器向MySQL数据库提交请求。后端得到数据库的反馈后,又将数据传输给浏览器页面展示,从而实现旅游信息的交互。如图4.1所示。图4.1系统架构设计4.2.2系统功能模块设计本设计从系统功能上可以分为两部分,分别是游客模块和会员模块。具体的结构图如图4.2所示。游客模块只能查看首页旅游信息分类展示和搜索旅游景点,但是可以注册成为会员。会员模块则可以实现用户登录和退出功能、首页旅游信息分类展示、“猜你喜欢”推荐、搜索功能、旅游景点用户评论、评分、收藏。图4.2系统功能结构图4.3数据库设计4.3.1数据库E-R图经过对系统总体对数据的需求,本系统的实体元素设计有用户表、旅游信息表、用户评分表、用户评论表组成。图4.3所示为数据库的E-R图。图4.3数据库E-R图4.3.2数据库表设计用户登录表(user)此表主要是登录系统的会员信息,如表4.1所示。表4.1用户登录表字段名类型非空字段说明IdInt是用户IdUsernameVachar否用户名PasswordVarchar否密码注释:所有表格中的Id都有唯一性、Username是用户的用户名,Password是用户的登录密码。旅游信息表(Trip)此表主要用于放置爬取的景点相关信息,如表4.2所示。表4.2旅游信息表字段名类型非空字段说明idInteger是IdnameVarchar否景点名称genreVarchar否景点labelVarchar否景点标签source_urlVarchar否来源地址priceVarchar否价格soldVarchar否已售shopVarchar否店铺label1Varchar否出发地label2Varchar否分类imgVarchar否景点介绍图片地址c_timeVarchar否更新时间注释:name是景点名称,genre是景点,source_url是旅游信息数据来源地址,label1是旅游线路出发地点,label2是一日游等分类,img是景点介绍图片地址。用户评论表(comment)此表用于放置用户发表的评论以及对应信息,如表4.3所示。表4.3用户评论表字段名类型非空字段说明idInt是iduser_idVachar否用户idtrip_idVarchar否关联的旅游idcommentVachar否评论内容c_timeVarchar否更新时间deleted_atVarchar否是否删除注释:c_time是更新时间,deleted_at是是否删除,有值删除,默认null。用户评分表(score)此表主要是记录评分模块的数据,如表4.4所示。表4.4用户评分表字段名类型非空字段说明 id Int是iduser_idVachar否用户idtrip_idVarchar否关联的旅游idscoreVachar否用户评分c_timeVarchar否更新时间deleted_atVarchar否删除时间注释:score是系统登录用户对旅游景点的评分,c_time是更新时间字段,该表是计算用户相似度,是推荐算法的数据集。收藏表(collect)此表用于关联相关的旅游信息列表,存储用户是否收藏旅游景点字段信息,如表4.5所示。表4.5收藏表字段名类型非空字段说明 id Int是iduser_idVachar否用户idtrip_idVarchar否关联的旅游idis_collectVachar否0未收藏1收藏c_timeVarchar否创建时间注释:is_collect表示“是否收藏”,0表示“未收藏”,1表示“收藏”,c_time是创建时间。

5旅游推荐系统的实现5.1环境配置系统实现环境及版本号如下。操作系统:Windows10。浏览器:Chrome浏览器。Python:Python3.8。Selenium:3.8.1。Bootstrap:3.4.1。Django:3.1.7。PyCharm:PyCharm2020.3.3(ProfessionalEdition)。数据库:MySQL8.0.0。5.2系统数据采集实现5.2.1旅游网站数据采集采集旅游网站数据时,采用的是Selenium框架,首先配置一个浏览器驱动,本文采用谷歌浏览器,对应谷歌浏览器驱动,这里需要注意的是不同浏览器类型、版本对应不同的浏览器驱动,需要下载对应的驱动,否则会造成版本冲突,无法实现数据爬取。其次,要分析爬取站点网页内容,明确抓取的信息,包括景点、景点名称、景点主图、已售、点破、价格等,爬取信息页面内容如图5.1所示。图5.1采集的旅游信息这里获取网页内容,首先发起请求,通过语句:driver.get("/sales/0-0-0-0-0-0-0-0.html?group=4")打开页面,并在getPageData函数中处理http的请求的响应html信息。在getPageData函数中,网页中的旅游景点信息列表可以通过driver.find_elements_by_xpath("//*[@class='itemclearfix']")语句获取到每条景点信息的节点数据。仔细观察可以发现,通过爬虫获取到的内容与图5.2网页源代码的内容一致。可以利用的标签选择器和get_attribute(),text()函数来爬取需要的内容。图5.2网页源代码5.2.2数据处理和存储利用网络爬虫在马蜂窝采集中的数据一般都不符合我们的需求标准,并且有大量没有利用价值的数据鱼目混珠,所以要对数据进行筛选与清洗。文本使用Python语言循环解析每个景点信息的节点,通过每个节点获取到具体需要的数据。数据处理具体如下:id:通过xpath的//*[@class='itemclearfix'][i]语句提取出原始信息,herf属性获得来源地址。通过字符串截取获得id。景点分组:通过xpath的//*[@id='related_poi']语句获取原始信息后,通过.get_attribute()函数获得分类景点。景点名称:通过xpath的//*[@class='itemclearfix'][i]//h3语句获取原始信息后,通过.text()函数获景点名称。景点标签:通过xpath的//*[@class='itemclearfix'][i]//div[@class='s-tag']/span,并使用strip()函数处理空格来源地址:通过xpath的//*[@class='itemclearfix'][i]语句提取出原始信息,herf属性获得来源地址。报价:通过xpath的//*[@class='itemclearfix'][i]//span[@class='price']/strong语句获取原始数据,因为获取的仅是价格数值,不便于显示,所以通过“'¥'+.text+'起'”拼接字符显示旅游线路报价。已售:通过xpath的//*[@class='itemclearfix'][i]//p获取的已售信息,并使用strip()函数处理空格。店铺:通过xpath的//*[@class='itemclearfix'][i]//span[@class='t']"获取的原始信息,并使用strip()函数处理空格。出发地:通过xpath的//*[@class='itemclearfix'][i]//span[@class='mark-type-10']/strong获取的出发地信息,并使用strip()函数处理空格。旅游类型:通过xpath的//*[@class='itemclearfix'][i]//span[@class='mark-typetype-10']/span获取原始信息,并使用strip()函数处理空格。封面地址:通过xpath的//*[@class='itemclearfix'][i]]//img获取原始信息,通过.get_attribute()函数获得封面地址。至此,一条旅游景点信息解析完毕,在数据库设计创建旅游信息表(Trip表),通过insert语句将处理后的数据存储到数据库表中。在往数据库中写入数据时,虚注意去重处理,如果url已经存在,不做任何操作,否则插入数据。从而保证书库中数据的准确性。数据库中部分数据查询结果如图5.3所示,主要包括id、景点、景点名称、来源地址、店铺、已售、价格等。图5.3Trip表部分数据采用循环语句,重复上面的解析过程,进行多页数据抓取。本系统利用Python爬虫技术爬取667条旅游数据,存储在数据库旅游表(Trip)中。5.3系统界面功能实现系统界面功能实现过程是:Bootstrap框架实现前端界面展示,浏览器通过http请求向Django的Web服务端请求接口数据,Django通过Jdbc访问数据库数据,并得到数据结果转化为json字符串返回给前端界面,最后在html文件里用Js解析json渲染到页面上。从功能设计可知,系统实现的主要功能有六个功能模块,分别是:用户信息用户注册。输入用户名、密码,登录,系统根据输入的条件通过sql查询数据库用户表,判断是否是系统注册用户,若不是系统用户,系统显示注册提醒,这时可以自定义用户名、密码提交数据完成注册事项。账号登录。输入正确的用户名和密码后点击登录按钮,系统查询数据库验证用户是否存在,存在显示登录系统成功。右上角显示用户登录状态。否则提示用户登录失败。账号登出。键鼠触碰界面右上角,点击退出即可登出账号。注册和登录页面如图5.4所示。图5.4注册登录页面首页景点分类展示无论是游客还是用户,登入平台首页,默认可根据一日游、跟团游、境内外半自助游等旅游信息,一目了然,十分便捷美观。首页如图5.5所示:图5.5网站首页搜索景点搜索文本框输入框,页面右上角显示,是可编辑状态,默认系统输入值是空,灰色提示字“搜索景点或旅游名称”。搜索功能实现,搜素文本输入框,输入关键词,如输入“股票”回车。系统通过select查询语句,模糊匹配where条件,查询数据库带有关键“乐山大佛”的旅游信息,返回给前端页面,即前端页面可获得带有该关键词的旅游的推送。搜索功能实现如图5.6所示。图5.6搜索关键词“乐山大佛”用户评论功能发布评论。针对每条旅游信息,已登录的用户可以点击景点名称,进入详情页面,在对话框中输入评论内容,发表评论,评论内容保存数据库评论表,同时再详情页显示,其他登录用户亦可以查看。重置评论。编辑评论时,对输入信息不满意,可以清空输入的文字。评论界面如图5.7所示。图5.7评论界面用户评分功能每条旅游信息,点击景点信息下的评分按钮,弹出评分对话框,输入入后都可以进行评分(0~10分),0分表示最不喜欢,10分表示最喜欢,输入不合法的字符或者分数,系统提示评分输入格式错误,有对评分格式校验。评分页面如图5.8所示。图5.8评分功能用户收藏功能每条旅游信息,点击景点信息下的收藏按钮,收藏该景点信息,信息保存数据库收藏表,用户可对该景点收藏、取消收藏。评分页面如图5.9所示。图5.9收藏功能“猜你喜欢”推荐“猜你喜欢”是为了发现用户之间可能存在的兴趣取向,提高使用平台的的舒适程度,通过用户对景点打分,经过推荐算法,相似度计算,找到最近邻居评过分,而用户未评过分的旅游信息推荐给该用户。例如,A用户进来对景点一号资源评2分景点二号评2分;B用户进来对景点一号评2分,那么系统就会把景点二号推荐给B用户。如图5.10。具体的推荐流程见3.2的详细介绍。新注册用户由于没有给景点评过分,没有旅游信息推荐给该用户。图5.10已评过分用户的“猜你喜欢”页面本系统采用如下逻辑实现推荐,伪代码如下。#计算物品关系矩阵foruser,tripsinself.data.items():

form1intrips:

form2intrips:

ifm1==m2:

continue

self.itemSim.setdefault(m1,{})

self.itemSim[m1].setdefault(m2,0)

self.itemSim[m1][m2]+=1/math.log(1+len(trips))#余弦相似度计算方法

trip_sim_matrix=[]

form1,related_tripsinself.itemSim.items():

form2,countinrelated_trips.items():sqrt

iftrip_popular[m1]==0ortrip_popular[m2]==0:

trip_sim_matrix[m1][m2]=0

else:

self.itemSim[m1][m2]=count/math.sqrt(trip_popular[m1]*trip_popular[m2])实现代码后运行结果如下图(以3.2中的user6为例)。图5.11物品相似矩阵运行结果从运行结果分析得出:针对目标用户user6喜欢的旅游id:349534获取到相关旅游产品的流行度,再算出相关旅游产品的关系矩阵,最后计算出旅游产品相似度矩阵,作为推荐结果数据集,产品相似数值趋近于1.0,说明旅游产品的相关性越强。5.4系统测试5.4.1测试案例本系统的测试主要针对旅游推荐系统是否实现系统需求,包括旅游景点信息的界面展示、旅游信息的搜索、用户评分等系统功能的实现。同时验证爬虫的采集数据情况,保证旅游信息定时更新,保证系统的正常运行。表5.1是系统功能验证测试案例。表5.1系统测试案例表测试场景操作步骤预期结果测试结果爬取旅游信息爬取马蜂窝旅游网数据库中存667条旅游通过搜索旅游景点首页搜索框输入关键词“亚龙湾”,查看搜索结果显示匹配关键词的旅游景点信息通过推荐景点展示登录用户对部分旅游景点评分,查看首页下部显示根据用户评分记录推荐的景点通过用户评分登录用户点击评分按钮,输入分数页面显示评分数据;分数存入数据库通过用户评论登录用户输入评论内容,发布景点详情页显示用户评论;评论存入数据库通过用户收藏登录用户收藏景点信息景点被收藏,收藏数据存入数据库通过5.4.2测试结果经过测试案例逐条验证通过,本文设计的推荐系统功能基本实现,浏览器界面用户交互性友好,系统程序稳定运行。系统能够有效地利用的评分历史记录,帮助用户推荐适合其旅游资讯内容,增加了用户粘性。6结论6.1总结本设计无论是爬虫数据采集功能,还是平台整体功能构架都能正常运行,论文中对每个功能都配有对应的文字解释与图片解释。数据库中的元素和表都有字段说明。在推荐算法上采取了基于内容的推荐算法,基于收集的评分数据有针对性地为每个用户推荐旅游,为用户提供个性化的服务。在网页设计上集合Bootstrap框架和Django框架制作前端页面和后台接口。平台整体风格漂亮大方,具有风土人情味,使用户有一种舒适的亲切感。结果表明,本文实现的基于Python爬虫的旅游推荐平台是可以创造商业价值的,具有一定的发展前景。6.2展望虽然本设计能完成预期制定的目标,但还是存在一些不足之处。首先,本设计采用的基于内容的推荐算法虽然能完成内容的推荐,但是在推荐的灵活性上可以有进一步的提高,比如可以考虑将评论量或者浏览量作为计算相似度的标准。也可以通过借鉴协同过滤算法的优点来进行混合推荐弥补短板。其次,本系统全部资讯内容都是从一个网站即马蜂窝旅游:/上爬取的,整理数据集数据667条。将来或许能采用信息量更大的数据集合,实现每天定时定量爬取,以便为用户带来最新的旅游资讯。推荐算法在当前的推荐系统中的发展前景还是非常明朗,相信在不久的未来,推荐算法能更好地改善我们的生活体验。

参考文献张玉军.基于深度学习的个性化旅游推荐方法研究[D]

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论