国庆节去哪浪?让 Python 帮你分析分析
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 帮你分析分析相关推荐
- 你的花呗额度为啥那么低?我用Python帮你做分析
再过7天,我们就将迎来2022! 尽管临近年末,但我却发现,包括腾讯.阿里.字节在内的互联网巨头,依然在执行着疯狂的招聘计划!仅在字节官网内,就同时发布了近万个在招职位! 其中,对数据分析人才的需求最 ...
- 用Python偷偷告诉你国庆8亿人都去哪儿浪?
" 祖国 70 周年的华诞一天天临近,各行各业都在为祖国母亲庆祝生日.作为一个 IT 人,也想贡献一份绵薄之力. 图片来自 Pexels 据文化和旅游部消息称,预计 2019 年国庆旅游人次 ...
- python查看微信撤回消息_想查看微信好友撤回的消息?Python帮你搞定
要说微信最让人恶心的发明,消息撤回绝对能上榜. 比如你现在正和女朋友用微信聊着天,或者跟自己喜欢的女孩子聊着天,一个不留神,你没注意到对方发的消息就被她及时撤回了,这时你很好奇,好奇她到底发了什么?于 ...
- 元旦去哪玩?用Python告诉你哪些景点爆满!
阅读本文大约需要 7 分钟 作者:zone7 首发于微信公众号:zone7 概述 ? 前言 ? 思考 ? 统计结果 ? 爬虫技术分析 ? 爬虫代码实现 ? 爬虫分析实现 ? 后记 ? 阿广说 前言 年 ...
- python压缩教程_无需压缩软件,用python帮你操作压缩包
写在之前 压缩包是互联网上软件发布的标准格式,同时对于系统管理很有用处.当我们需要将多份文件发送给别人的时候,最好通过压缩包的形式发送,还有在备份某些文件的时候,为了减少磁盘空间的占用,也需要对备份的 ...
- python色卡识别_用Python帮小姐姐选口红,人人都是李佳琦
原标题:用Python帮小姐姐选口红,人人都是李佳琦 对于李佳琦,想必知道他的女生要远远多于男生,李佳琦最早由于直播向广大的网友们推荐口红,逐渐走红网络,被大家称作"口红一哥".不 ...
- python抢火车票_听说你能用 Python 帮我抢火车票?!
原标题:听说你能用 Python 帮我抢火车票?! 文 | 车栗子 来源 |量子位公众号 想要十一回家的小伙伴们,大概刚刚经历了一波抢票大战. 顺便把一个Python抢票工具,送到了GitHub趋势榜 ...
- 【微信辅助】疫情当前,python帮你找出朋友圈的武汉朋友给予关怀
我是程序员小小叶,为大家带来原创精彩技术内容. 疫情无论是对于个体还是企业都是无法承受之重.希望疫情早日过去,这是作为一个普通人一个的小小心愿. 我们身边的亲朋好友也或多或少受到了疫情的影响,让我们来 ...
- 基于导向滤波的暗通道先验去雾算法(Python,可直接运行)
基于导向滤波的暗通道先验去雾算法(Python语言,可直接运行) 1 编译环境 2 原理介绍 2.1 暗通道先验 2.1.1 暗通道先验理论与去雾模型 2.1.2 处理步骤 2.2 导向滤波求t(x) ...
最新文章
- 推荐一个小而美的Python代码格式化工具
- 应用系统瓶颈排查和分析的思考-Arthas 实战
- chatterbot mysql_ChatterBot代码解读-介绍和框架
- php webview referer,WebView构造中间页自由设置Referrer
- AD账户频繁被锁定-开启日志审核策略
- h5如何动态获取键盘高度_H5 键盘兼容性小结
- CentOS 7的安装
- ubuntu下取代ping的好工具tcpping
- 将图片型pdf转成可选中文字型pdf(免费)
- 计算机毕设中期检查表怎么写,[毕业论文中期检查表(精选多篇)] 毕业论文中期检查表怎么写...
- 打点计时器的实现javascript
- strlen函数php中文,strlen函数介绍与使用方法详解
- 风机疲劳载荷谱转SACS疲劳载荷定义文件
- 你知道一本书封面的著、编著、编、主编分别是什么意思吗?
- 怎么判断机械表上满弦_机械手表上弦是什么意思,怎么看手表有没有上满弦
- CSS基础标签属性及案例
- java一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下 求它在 第10次落地时,共经过多少米?第10次反弹多高?
- 四川计算机应用等级分类,四川省普通高等学校计算机应用知识和能力等级考试大纲.doc...
- 最详细的开源监控系统对比分析!建议收藏
- python利用WPS接口之excel中图片写入
热门文章
- 多媒体计算机技术2017年四月,2017年4月模拟题-多媒体技术
- 分析N沟道MOS管和P沟道MOS管在电路中的详细应用
- 【代数之美】线性方程组Ax=0的求解方法
- C# 模拟鼠标移动和点击(转载)
- win10设置以管理员身份开机启动
- TunesKit Spotify Converter Mac(Spotify音乐转换工具) v1.5.1激活版
- nohup命令及其输出文件 linux nohup命令详解
- [574]tf.nn.xw_plus_b
- 执FPGA异构计算之耳
- JVM分化回收机制(年轻代、年老代、永久代)