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前端越来越流行的的技术

1535
来自专栏维恩的派VNPIE

用于回测的Python交互K线工具

开发策略时,如何直观地检查自己的交易逻辑是否正确?代码所实现的和自己的策略逻辑是否一致?moonnejs在「维恩的派」论坛里分享了一个可以用于回测的交互K线工具...

4352
来自专栏何俊林

史上最牛逼的音乐播放器—仿网易云音乐(已开源)

前言:音乐播放器倒见过不少,做到几乎和官方网易云音乐安卓版差不多的,还是头第一回见。aa112901 的这款仿网易云音乐安卓版客户端,很多地方值得我们学习。无论...

3.7K10
来自专栏娱乐心理测试

第一个微信小程序

2846
来自专栏程序员宝库

爬虫抓取的门道——来看这篇

本文首发于我的个人博客,同步发布于SegmentFault专栏,非商业转载请注明出处,商业转载请阅读原文链接里的法律声明。 web是一个开放的平台,这也奠定了w...

4419
来自专栏不止是前端

实用主义:前端IDE选择从入门到高阶

42012
来自专栏phodal

使用 React Native 重写大型 Ionic 应用后,我们想分享一下这八个经验

本文的内容是关于 React Native 重写的经验分享,基于 React Native 重写 Ionic 应用Growth 过程中遇到的一些坑。 Growt...

2626
来自专栏即时通讯技术

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

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

1642
来自专栏CSDN技术头条

IMVC(同构 MVC)的前端实践

导语 随着 Backbone 等老牌框架的逐渐衰退,前端 MVC 发展缓慢,有逐渐被 MVVM/Flux 所取代的趋势。 然而,纵观近几年的发展,可以发现一点,...

2296
来自专栏web前端教室

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

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

943

扫码关注云+社区

领取腾讯云代金券