2019 年国庆马上就要到来了。。。

今年想着来点新花样吧
玩肯定是要去玩的
不然怎么给祖国庆生
那去哪里好玩 big 还高呢?
咱就用 Python 分析下
看看哪些地方值得我们去

让我们切入正题。。。


项目目标:

使用 Python 分析出各地哪些旅游景点好玩,更值得我们去

数据来源:

马蜂窝旅行网

相关模块:

Flask、json、pymongo、re、lxml、requests

运行方法:

  • 直接在 terminal 中运行项目下的 main.py 即可,或者使用 pycharm 直接打开项目使用 Flask 运行
  • 用浏览器访问:http://127.0.0.1:5000/
  • 注意:本项目要用到MongoDB数据库,请在运行前安装,各平台MongoDB安装教程请点击:安装教程

项目演示:

各地景点数据抓取代码如下:

import requests
from lxml import etree
import refrom db.mongodb import mongoclass MaFengWoSpider(object):def __init__(self, city):self.city = cityself.url_pattern = "http://www.mafengwo.cn/search/s.php?q=" + city + "&p={}&t=poi&kt=1"self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36"}def get_url_list(self):"""获取url列表"""url_list = []for i in range(1, 21):url = self.url_pattern.format(i)url_list.append(url)return url_listdef get_page_from_url(self, url):"""根据url, 发送请求, 获取页面数据"""response = requests.get(url, headers=self.headers)# 返回响应的字符串数据return response.content.decode()def get_datas_from_page(self, page):"""解析页面数据"""# 把页面转换为element对象, 就可以使用XPATH提取数据element = etree.HTML(page)# 获取包含景点信息的标签列表, xpath返回的是一个列表lis = element.xpath('//*[@id="_j_search_result_left"]/div/div/ul/li')# 遍历标签列表, 提取需要的数据# 定义列表, 用于存储数据data_list = []for li in lis:# 定义一个字典用于储存数据item = {}# 获取景点名称name = ''.join(li.xpath('./div/div[2]/h3/a//text()'))# 如果标题中, 没有景点就过滤掉if name.find("景点") == -1:continue# 去掉标题中的景点item['name'] = name.replace('景点 -', '')# print(item)# 提取景点地址item['address'] = li.xpath('./div/div[2]/ul/li[1]/a//text()')[0]# print(address)# 获取点评数量  点评(500)comments_num = li.xpath('./div/div[2]/ul/li[2]/a/text()')[0]# 提取点评中的数item['comments_num'] = int(re.findall(r'点评\((\d+)\)', comments_num)[0])# print(comments_num)# 获取游记数量 游记(50)travel_notes_num = li.xpath('./div/div[2]/ul/li[3]/a/text()')[0]item['travel_notes_num'] = int(re.findall(r'游记\((\d+)\)', travel_notes_num)[0])# 记录当前景点的城市item['city'] = self.city# print(item)data_list.append(item)return data_listdef save_data(self, datas):"""保存数据"""for data in datas:# 把景点名称,指定为数据库的主键data['_id'] = data['name']# 保存数据到数据库中mongo.save(data)def run(self):"""程序的入口, 核心业务逻辑"""# 1. 准备url列表url_list = self.get_url_list()# print(url_list)# 2. 遍历url列表, 发送请求, 获取响应数据for url in url_list:page = self.get_page_from_url(url)# 3. 解析数据datas = self.get_datas_from_page(page)# 4. 保存数据self.save_data(datas)if __name__ == '__main__':ms = MaFengWoSpider("广州")ms.run()

main方法代码如下:

from flask import Flask
from flask import render_template
from flask import Response
import jsonfrom db.mongodb import mongo
from spiders.mafengwo import MaFengWoSpider# 创建Flask对象
app = Flask(__name__)@app.route('/')
def view():return render_template('view.html')# 渲染数据的方法
@app.route('/echarts/<city>')
def chars(city):# 获取城市的景点数据量count = mongo.find_scenic_count(city)print(count)# 如果没有查到需要的数据, 就开启一个爬虫, 去采集需要的数据if not count:# 创建指定城市的爬虫, 抓取需要的数据MaFengWoSpider(city).run()# 查询数据datas = mongo.find_scenics(city)# 返回json格式的数据return Response(json.dumps(datas))if __name__ == '__main__':# 启动服务app.run(debug=True)

项目地址:

https://github.com/NickyangPeng/Travel_analysis_mafengwo

国庆节去哪浪?让 Python 帮你分析分析相关推荐

  1. 你的花呗额度为啥那么低?我用Python帮你做分析

    再过7天,我们就将迎来2022! 尽管临近年末,但我却发现,包括腾讯.阿里.字节在内的互联网巨头,依然在执行着疯狂的招聘计划!仅在字节官网内,就同时发布了近万个在招职位! 其中,对数据分析人才的需求最 ...

  2. 用Python偷偷告诉你国庆8亿人都去哪儿浪?

    " 祖国 70 周年的华诞一天天临近,各行各业都在为祖国母亲庆祝生日.作为一个 IT 人,也想贡献一份绵薄之力. 图片来自 Pexels 据文化和旅游部消息称,预计 2019 年国庆旅游人次 ...

  3. python查看微信撤回消息_想查看微信好友撤回的消息?Python帮你搞定

    要说微信最让人恶心的发明,消息撤回绝对能上榜. 比如你现在正和女朋友用微信聊着天,或者跟自己喜欢的女孩子聊着天,一个不留神,你没注意到对方发的消息就被她及时撤回了,这时你很好奇,好奇她到底发了什么?于 ...

  4. 元旦去哪玩?用Python告诉你哪些景点爆满!

    阅读本文大约需要 7 分钟 作者:zone7 首发于微信公众号:zone7 概述 ? 前言 ? 思考 ? 统计结果 ? 爬虫技术分析 ? 爬虫代码实现 ? 爬虫分析实现 ? 后记 ? 阿广说 前言 年 ...

  5. python压缩教程_无需压缩软件,用python帮你操作压缩包

    写在之前 压缩包是互联网上软件发布的标准格式,同时对于系统管理很有用处.当我们需要将多份文件发送给别人的时候,最好通过压缩包的形式发送,还有在备份某些文件的时候,为了减少磁盘空间的占用,也需要对备份的 ...

  6. python色卡识别_用Python帮小姐姐选口红,人人都是李佳琦

    原标题:用Python帮小姐姐选口红,人人都是李佳琦 对于李佳琦,想必知道他的女生要远远多于男生,李佳琦最早由于直播向广大的网友们推荐口红,逐渐走红网络,被大家称作"口红一哥".不 ...

  7. python抢火车票_听说你能用 Python 帮我抢火车票?!

    原标题:听说你能用 Python 帮我抢火车票?! 文 | 车栗子 来源 |量子位公众号 想要十一回家的小伙伴们,大概刚刚经历了一波抢票大战. 顺便把一个Python抢票工具,送到了GitHub趋势榜 ...

  8. 【微信辅助】疫情当前,python帮你找出朋友圈的武汉朋友给予关怀

    我是程序员小小叶,为大家带来原创精彩技术内容. 疫情无论是对于个体还是企业都是无法承受之重.希望疫情早日过去,这是作为一个普通人一个的小小心愿. 我们身边的亲朋好友也或多或少受到了疫情的影响,让我们来 ...

  9. 基于导向滤波的暗通道先验去雾算法(Python,可直接运行)

    基于导向滤波的暗通道先验去雾算法(Python语言,可直接运行) 1 编译环境 2 原理介绍 2.1 暗通道先验 2.1.1 暗通道先验理论与去雾模型 2.1.2 处理步骤 2.2 导向滤波求t(x) ...

最新文章

  1. 推荐一个小而美的Python代码格式化工具
  2. 应用系统瓶颈排查和分析的思考-Arthas 实战
  3. chatterbot mysql_ChatterBot代码解读-介绍和框架
  4. php webview referer,WebView构造中间页自由设置Referrer
  5. AD账户频繁被锁定-开启日志审核策略
  6. h5如何动态获取键盘高度_H5 键盘兼容性小结
  7. CentOS 7的安装
  8. ubuntu下取代ping的好工具tcpping
  9. 将图片型pdf转成可选中文字型pdf(免费)
  10. 计算机毕设中期检查表怎么写,[毕业论文中期检查表(精选多篇)] 毕业论文中期检查表怎么写...
  11. 打点计时器的实现javascript
  12. strlen函数php中文,strlen函数介绍与使用方法详解
  13. 风机疲劳载荷谱转SACS疲劳载荷定义文件
  14. 你知道一本书封面的著、编著、编、主编分别是什么意思吗?
  15. 怎么判断机械表上满弦_机械手表上弦是什么意思,怎么看手表有没有上满弦
  16. CSS基础标签属性及案例
  17. java一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下 求它在 第10次落地时,共经过多少米?第10次反弹多高?
  18. 四川计算机应用等级分类,四川省普通高等学校计算机应用知识和能力等级考试大纲.doc...
  19. 最详细的开源监控系统对比分析!建议收藏
  20. python利用WPS接口之excel中图片写入

热门文章

  1. 多媒体计算机技术2017年四月,2017年4月模拟题-多媒体技术
  2. 分析N沟道MOS管和P沟道MOS管在电路中的详细应用
  3. 【代数之美】线性方程组Ax=0的求解方法
  4. C# 模拟鼠标移动和点击(转载)
  5. win10设置以管理员身份开机启动
  6. TunesKit Spotify Converter Mac(Spotify音乐转换工具) v1.5.1激活版
  7. nohup命令及其输出文件 linux nohup命令详解
  8. [574]tf.nn.xw_plus_b
  9. 执FPGA异构计算之耳
  10. JVM分化回收机制(年轻代、年老代、永久代)