Python爬虫之撩妹篇—微信实时爬取电影咨询

本文将介绍如何使用爬虫在微信对话中实现实时的电影咨询爬取功能,希望和大家一起来分享

撩妹起源

俗话说的好:少壮不撩妹,长大徒伤悲啊!

说的很对,但是在这个撩妹的时代,要想成功把到妹,还真得花点心思才行啊。每次和妹子约会,妹子有时就会问:最近有啥好看的电影没?对于妹子的提问,回答要么就是不知道,要么就是自己去查app了,觉得这样有时候就缺少了一些互动的乐趣了。

于是就在想,如果有个能爬取电影咨询并能自动回复的东东是不是觉得有点小惊喜呢?

(效果如下)

(后面有完整的效果)

也是前一阵闲来无事,想到这就搞了个简单的小工具,实现了在微信上实时爬取网站电影咨询的功能。这样子,以后就可以偶尔给给妹子来个小惊喜,没准儿就投怀送抱了呢。哈哈,博主也是开玩笑,其实就是觉得好玩,撸起袖子就是一顿敲。

----------------------------------------------------------------------------------------------------

功能分析

好了,让我们看看是怎么个一回事。

网站电影的信息来源于豆瓣,都说豆瓣评分很公正客观,所以就选了这个作为目标源了。

目标功能:

  • 用户输入任何带有电影字样的话(如:看电影),自动跳转到页面,提供 所有电影分类供用户选择。
  • 用户选择任意一个类型后,分别反馈给用户按热度、时间、评论顺序排列的三份前十电影表单(电影名+评分)。
  • 用户根据提供的电影,输入任意一个电影名后,将反馈给用户关于该电影的相关详细信息表单。
  • 要求用户可以再次输入任意电影类型去搜其它电影或者此类型的任意其它电影。

网站页面分析:

博主看到,这个页面的这些电影类型都是动态的信息(红色框),因此不能使用常规的request方法舒服的爬取了,这里将使用Selenium自动化测试工具来解决动态页面的爬取(之后会开一篇分享Selenium如何使用)。

这是点击电影进去后看到的详细信息,这些信息是静态的,在源码中有很好的体现,因此详细信息的爬取使用前几篇分享过的request方法解析,request方法详见下面:

页面抓取分析:

抓取信息博主使用了Selenium中的Xpath定位动态数据,以及BeautifulSoup的方法定位静态数据,方法很多种不唯一,只供参考(后续马上开一篇归纳所有爬取信息的方法)。

微信对话:

与微信互动的方面,就使用简单的接口模块itchat实现,链接里面有详细的api介绍,http://itchat.readthedocs.io/zh/latest/api/

好了,到此基本的功能实现方法有了一个概况,下面看看源码。由于篇幅问题,博主这里贴上部分主要源码,完整源码可以在以下链接下载:https://github.com/xiaoyusmd/Wechat_MovieSpider_Master

----------------------------------------------------------------------------------------------------

源码分析

电影概况信息(电影名+评分):

  • 这里使用了Chrome浏览器作为模拟对象进行爬取,由于浏览器有点慢,操作间隙加了一些延迟,不然反应不过来。如果追求速度,也可以使用PhantomJS来代替Chrome。
  • 使用Selenium的xpath定位对象,利用鼠标点击事件完成动态操作。

电影详细信息操作:

  • 根据用户输入的电影名,查找其在详细列信息列表movie_info_all(三个顺序排列列表hot, time, comment的顺序extend总和)的位置
  • 进而定位电影名在哪个排列列表中里面,然后点击进去获得该电影的url

电影详细信息页面下载:

  • 根据上面返回的电影名url进行request下载,并返回下载的html。
  • 由于不是海量数据爬取,也没加入代理IP池等反爬技术。

电影详细信息解析(字段):

  • 在函数体开头清空movie_detail_info,以准备用户下次的操作。
  • 根据提供的html进行详细信息字段的解析,将各个字段字符串放进movie_detail_info大列表中。

Wehchat微信数据交换接口:

  • movie_detail_info等的一些列表都是用了join方法字符串化了,并用\n隔开。

以上就是大部分的核心源码了,写的有点糙,欢迎大家一起讨论和指正。

----------------------------------------------------------------------------------------------------

功能效果图

(目标功能实现)

----------------------------------------------------------------------------------------------------

总结

模块使用

  • 使用Selenium工具进行动态操作
  • 使用request进行相应静态请求下载
  • 使用Selenium的xpath进行数据定位和提取
  • 使用BeautifulSoup进行数据提取
  • 使用itchat完成微信对话数据交互

改进和完善

  • 用户完成操作后一定时间内无反应浏览器自动关闭
  • 多人同时发信息的并发问题
  • 发生网络等中断错误时提示给用户
  • 将电影的图片也一起返回给用户(现在下载的图片格式webp)

还有很多地方需要改进和完善,在此与大家先分享,仅供参考,更多精彩内容后续分享。

----------------------------------------------------------------------------------------------------

原文发布于微信公众号 - Python数据科学(Python_Spiderman)

原文发表时间:2018-01-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程微刊

2018前端越来越流行的的技术

16350
来自专栏CSDN技术头条

流动的数据——使用 RxJS 构造复杂单页应用的数据逻辑

我们经常见到这么一些场景: 微博的列表页面; 各类协同工具的任务看板,比如 Teambition。 ? 这类场景的一个共同特点是: 由若干个小方块构成; 每个小...

32060
来自专栏web前端教室

【周总结】0827前端零基础班本周总结(08.27-08.31)

每一期的学生情况都是不同的,因为是从完全的零基础开始讲起,面向的是完全的前端零基础学生。所以第一周基本上进度都比较慢,主要是通过课后作业和课程直播时的即时反馈来...

10130
来自专栏安恒网络空间安全讲武堂

0CTF h4x0rs.club1/2 复现

周末肛了一下0ctf,发现自己依旧那么菜。一道题也没解出来,成功的再一次拖了队伍后退。 今天发现国外大佬们已经开始放wp了。于是自己学习一波,复现一下。 先吐槽...

41670
来自专栏即时通讯技术

腾讯技术分享:Android版手机QQ的缓存监控与优化实践

对于Android应用来说,内存向来是比较重要的性能指标。内存占用过高,会影响应用的流畅度,甚至引发OOM,非常影响用户体验。因此,内存优化也向来是行业内的重点...

21420
来自专栏CDA数据分析师

教你一招 | 用Python写一个简单的微博爬虫

我是个微博重度用户,工作学习之余喜欢刷刷timeline看看有什么新鲜事发生,也因此认识了不少高质量的原创大V,有分享技术资料的,比如好东西传送门;有时不时给你...

243100
来自专栏携程技术中心

干货 | IMVC(同构 MVC)的前端实践

作者简介 古映杰,携程度假研发部前端和 node.js 架构负责人。开源库 react-lite 作者。本文来自古映杰在“携程技术沙龙——新一代前端技术实践”上...

57150
来自专栏葡萄城控件技术团队

用FlexGrid做开发,轻松处理百万级表格数据

表格数据处理是我们项目开发中经常会遇到的设计需求之一,所需处理的数据量也较大,通常是万级、甚至百万级。此时,完全依赖平台自带的表格工具,往往无法加载如此大的数据...

23980
来自专栏wblearn

我的Web开发实战总结(一)写在前面截图快速查询与快递单号我的待办事物办理与信息查询公告通知销售业绩与新客户业绩工作看板排行榜写在最后

最近一直在做项目,感觉没什么分享的所以一直没写。 今天不上班,就把最近做的一个demo做个简单的总结。

10410
来自专栏张戈的专栏

WordPress 4.0 Benny简体中文版现已开放下载

昨天,收到了 WordPress 官方邮件,告知 4.0 已发布,要我确认中国联盟的导航插件是否兼容新版本。 ? 不过后台看了下,却没提示更新。直到今早才在后台...

36870

扫码关注云+社区

领取腾讯云代金券