爬虫+网站开发实例:电影票比价网

news/2024/5/20 15:11:33/文章来源:https://blog.csdn.net/weixin_40190310/article/details/113520653
注:一篇去年的旧文,发现没在知乎发过,过来补个档。有个小问题是项目中淘票票的网页反爬提升且变动较多,目前暂不可用了。

时常有同学会问我类似的问题:我已经学完了 Python 基础,也照着例子写过一点爬虫代码 / 了解过 django 的入门项目 / 看过数据分析的教程……然后就不知道要做什么了。接下来应该如何继续提升编程能力呢

我的答案很简单:

做项目

不要把“项目”想象得太复杂,觉得一定是那种收钱开发的才能称作项目(如果有这种项目当然会更好)。对于刚刚跨入编程世界的你来说,任何一个小项目都是好的开始。你所需要的,就是一双发现问题的眼睛。生活中工作中的一些小事情小麻烦,多想一步,是不是可以写一小段代码来解决。

一开始,或许你的解决方案很笨拙,很复杂,本来5分钟就能搞定的事情,你写代码却花了一个小时。但对你来说,此时的目的并不只是解决问题,而是这个过程本身。在折腾的过程中,你的经验才会增长。这是你单纯看教程所无法达到的,再好的教程也替代不了动手。(有时候会有人评论说,这功能直接用xxx就可以了,干嘛还要自己写代码。对此我不做评价,因为我知道他不是来学编程的。)

我们编程教室也陆续提供了一些项目案例。你可以参考我们的示例代码,或者更好的是,自己去思考一个解决方案并实现。我们的案例不少都放在了网站 lab.crossincode.com 上演示,欢迎大家去浏览。内容会持续更新,可留意我们微信公众号和知乎专栏里的文章。


今天介绍的这个项目就源自生活中的一个场景:买电影票

当你打算周末出门看场电影的时候,就必然面临三个终极问题:

  1. 看什么?
  2. 什么时候看?
  3. 去哪儿看?

通常你只需要打开常用的购票App,选一部最近口碑不错的片子,去熟悉的影院看看有哪些场次就可以了。但有时你也会发现,同样一部电影,不远的两家影院,价格就差很多,不同的购票App也会因为促销活动之类有不同的优惠力度,一张票可能会相差几十元。但如果每次都去几个App把最近的排片和价格都浏览一遍,那也太麻烦了。于是就有了我们这个小项目:

电影票比价网

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfNjI=,g_se,x_0,y_0,t_100

在我们这个网页上,会展示出当前热映的电影。进入每部电影,选择城市区域影院日期,就可以看到最近的排片时间和不同渠道的价格。目前,我们是从糯米淘票票时光网三个渠道获取价格来做演示。(注:项目中淘票票现已失效)

watermark,image_bG9nby9jc2RuXzEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLGhfNjI=,g_se,x_0,y_0,t_100

实现技术

本项目是对爬虫和Web网站的综合运用,适合已经有掌握python基础,并且对此有一些了解的同学作为练手项目。涉及到模块主要是:

  • Django(1.10)
  • requests
  • bs4
  • python-Levenshtein(用来匹配不同渠道的影院信息)

代码结构

项目主要有三块:

  1. douban_movie
    使用豆瓣 api 每日更新上映的影片列表。
  2. movie_tickets
    项目的核心部分,用来处理影院信息和排名信息的抓取。
  3. django
    项目本身是一个网站,整体是在 django 的框架之中。

开发思路

  1. 使用爬虫爬取各电影票网站所有的电影院链接,作为基本的数据保存下来
  2. 使用豆瓣 API 获取当日上映的电影信息,并每天更新
  3. django 显示电影信息,提供给用户选择电影院的接口
  4. 将影片和影院信息发送到 django 后台进行查询,爬取对应的排片信息显示给用户

代码片段

# 获取淘票票某地区某电影院某影片价格# 
1. 根据查询条件获取影院 id# 
2. 根据影院 id 获取该影院正在上映电影# 
3. 获取 查询电影的排片时间表链接# 
4. 拿到价格
def get_movie_tickets(self, *args):assert len(args) == 4, 'not enough parameters \n type in -h for help'movie_name = args[3]mt = TaoppDt()cinema_url = mt.search(*args[:3])assert cinema_url, '未查询到该电影院'pattern = re.compile(r'cinemaId=(\d+)')cinemaid = re.findall(pattern, cinema_url)[0]film_url = 'https://dianying.taobao.com/cinemaDetailSchedule.htm?cinemaId=' + str(cinemaid)content = self.rq.req_url(film_url)assert content, '请求失败,请检查 /utils/req.py 中 req_url 函数是否工作正常'soup = bs4.BeautifulSoup(content, 'lxml')soup_film = soup.find('a', text=re.compile(movie_name))assert soup_film, '未查询到该电影'film_param = soup_film['data-param']return self._get_ticket_info(film_param)

其他说明

  1. 项目为了有一个较好的交互效果,在页面上用到了不少 Ajax 请求。这需要有一定的前端 js 基础。对网页前端不熟悉的同学可暂且略过,重点关注后端实现。
  2. 不同渠道对于同一家影院的名称很可能有出入,因此这里使用了 python-Levenshtein 来对文本进行匹配。
  3. 代码里在抓取时有用到我们的另一个项目:IP代理池(参见 Crossin:听说你好不容易写了个爬虫,结果没抓几个就被封了?)。但因为服务器资源有限,有时拿不到可用的代理。各位自己电脑上运行代码时,可尝试把 requests 的 proxies 参数去除。
  4. 作为一个演示项目,必然存在一些bug(当然商业项目也不可能没有bug),加上爬虫的程序极有可能因为对方网站更新而失效。所以如果遇到问题,欢迎大家给我们报错。

代码下载

完整的代码详细代码说明已上传 Github,获取下载地址请在公众号(Crossin的编程教室)里回复 电影票


════

其他文章及回答:

学编程:如何自学Python | 新手引导 | 一图学Python

开发案例:智能防挡弹幕 | 红包提醒 | 流浪地球

欢迎搜索及关注:Crossin的编程教室

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_883677.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昝辉SEO告诉你:SEO是什么鬼

SEO 是英文search engine optimization的缩写,其中文意思是搜索引擎优化。 而从事这方面工作的就是search engine optimizer,搜索引擎优化师。他们利用工具或者其他的各种手法使自己的网站符合搜索引擎的搜索规则,从而获得较好的排名…

焦大SEO:做SEO怎么快速入门

seo学习必须懂简单程序知识:html/css/js等代码要会使用,作为一个专业的seo专员必须懂得这些代码的使用以便做网站内部布局是找不到头绪,对建站有一定的了解,也就是说一个计算机理科生会非常占有优势,其次一些快捷工具需…

爬取招聘网站数据分析数据,可视化,flume,hive,sqoop,mysql

一、爬取数据 ①qiancheng.py ②pipelines.py ③sitting ④items 二、数据储存 1、把MongoDB数据导出为csv文件 在E:\MongoDB\bin下cmd mongoexport.exe --csv -f _id,name,salary,gongsi,didian,jingyan,xueli,neirong,jineng -d qiancheng -c Table -o Test.csv2、上…

换IP软件带你了解网站的反爬虫策略有哪些

自有网络以来,就一直存在爬虫和反爬虫,越是大网站,越是成熟的网站,其反爬虫机制越完善,最初的IP限制,验证码限制,还有其他的限制,今天小编跟大家一起去了解下网站在哪些地方设置反爬…

Slashdot:技术怪才的新闻网站

你关心CSS吗?Gnome呢?还有GPL?这是一个提供“技术怪才的新闻”的网站Slashdot所热衷谈论的话题。一旦你明白聚集Slashdot周围的人群到底在谈论什么,你也许会一样充满热情地加入进去。 Slashdot是你从来没有访问过的最重要的网站&a…

学习c/c++的50个好网站

来自: 你不躲猫猫(why我所做的看起来像一个笑话) 2010-04-01 10:12:43 1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段 2、http://www.hotscripts.com/category/c-cpp/scripts-programs/ Hotscripts --提供数以百计的C和C脚本和程序。所有程序都分为…

你应该关注的十个智能硬件中文网站

智能硬件 摘要 : 不论你是智能硬件从业者,还是智能硬件爱好者,不妨统一称之为“智能硬件er”。在信息泛滥的时代,专注于智能硬件,能提供好的资讯、观点、资源的平台屈指可数。这是为您收集的值得关注的十大智能硬件中文网站。 不论…

PHP网站根据项目指定不同PHP版本进行解析

前提 : 公司产品安装后环境为Nginx/PHP/MySQL , 其中PHP为5.4版本 , 这个版本相对稳定 , 但是对于某些时候来说版本已经很低了 , 所以考虑在不升级的情况下 (主要是升级后会引起主体项目崩溃) , 采用其他版本的PHP来进行解析 , 主要是利用了PHP进程管理器 FPM 1. 下载一个高版…

Vs2010发布Asp.Net网站及挂到IIS服务上

首先用VS2010打开一个ASP.net项目。 也可以通过VS菜单-》生成-》发布网站 选择发布网站的路径, 这样发布就可以了, 下面就把发布出来的网站挂到IIS上,控制面板-》管理工具》Internet信息服务(IIS)管理器 在树列表中选择…

网站热图生成工具 ClickHeat

阿里百川,开启移动应用开发的新篇章 ClickHeat 是一个很酷的 JavaScript 库,它可以帮你统计一个页面上用户点击的热度分布图,支持中文显示。 如下图所示 在线演示(用户名和口令都是demo): http://www.la…

网站悬浮窗——在线客服

** <!DOCTYPE html> <html> <head><meta charset"utf-8"> <title>在线尝试 Bootstrap 实例</title><link rel"stylesheet" href"css/bootstrap.min.css"> <script src"js/jquery.min.js&quo…

强烈推荐自学互联网编程开发网站,学习神器

#php中文网 免费 www.php.cn 评分:五颗星 #后盾人网 免费 www.houdunren.com 系统课程是多个实战课程的组合&#xff0c;用来全面掌握一门语言或软件的使用&#xff0c;尤其适合刚入门的新手系统牢固的掌握知识。 在线文档以及css等视频讲解超细节,一集一般不超过10分钟. 五…

自动部署 打造个人网站:阿里云(ECS)+域名+Node+Webhooks(github)

我的个人网站 前阵子赶上双十一优惠&#xff0c;买了三年的阿里云1核2G40G的云服务器&#xff08;三年一共二百多&#xff09;&#xff0c;配了个简单的node服务&#xff0c;为了使用GitHub的webhooks功能&#xff0c;后期又买了一年的.club域名&#xff08;第一年8rmb)&#x…

python爬虫爬取导航网站所有网址并建立自己的导航网站

分析目标网站 目标网站的域名│www.dianyinggou.com/linkNav/网站结构 | 静态是否反爬虫 | 否 制定攻略 1.将分类页面的目录和名称写进列表里面&#xff0c;然后通过循环将列表里面的目录和名称依次导出&#xff0c;目的是为了组合成新的链接&#xff0c;方便访问下级链接 如…

管理联系人网站(web小项目)

此项目主要功能有&#xff1a; 输入验证码登录 查看联系人列表 添加联系人 修改/删除联系人 批量删除联系人 功能预览&#xff1a; 所有文件一览 注&#xff1a;web目录下的css&#xff0c;fonts&#xff0c;js是Bootstrap框架的&#xff0c;要使用需在Bootstrap官网下载…

d3-tip文本提示框实现步骤+click和mouseout触发动作事件冲突_解决方法

目录 d3-tip介绍d3-tip实现步骤1、添加使用的JavaScript函数库2、为柱形图创建tip3、调用tip4、确定数据集5、添加触发动作事件6、click和mouseout触发动作事件冲突_解决方法 d3-tip介绍 d3-tip是D3可视化工具中的一种&#xff0c;可用于生成自定义文本提示框。如下图所示&…

淘宝网站发展详解

一、引言 光棍节的狂欢 “时间到&#xff0c;开抢&#xff01;”坐在电脑前早已等待多时的小美一看时间已到 2011 年 11 月 11 日零时&#xff0c;便迫不及待地投身于淘宝商城一年一度的大型网购促销活动 —— “淘宝双11购物狂欢节”。小美打开早已收藏好的宝贝 —— 某品牌的…

浏览器兼容性问题,前端性能优化、SEO优化

目录 一、常见浏览器兼容性问题及解决二、前端性能优化三、SEO优化 一、常见浏览器兼容性问题及解决 不同浏览器的内核不尽相同&#xff0c;所以各个浏览器对网页的解析存在一定的差异。 浏览器内核主要分为两种&#xff0c;一是渲染引擎&#xff0c;另一个是js 引擎&#xff…

Nginx静态网站的部署

Nginx静态网站的部署 静态网站的部署 首先先看一下nginx/conf/nginx.conf 配置文件内的信息&#xff1a; #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pi…

使用node.js爬网站图

目标网站&#xff1a;http://m.mmjpg.com/hot/ var http require(http); var request require(request); var fs require(fs); var Promise require(bluebird); var curIndex 1 var curYear 2015 //下载文件 function downloadFile(uri,filename){return new Promise((re…