“ 本文将介绍如何使用爬虫在微信对话中实现实时的电影咨询爬取功能,希望和大家一起来分享”
撩妹起源
俗话说的好:少壮不撩妹,长大徒伤悲啊!
说的很对,但是在这个撩妹的时代,要想成功把到妹,还真得花点心思才行啊。每次和妹子约会,妹子有时就会问:最近有啥好看的电影没?对于妹子的提问,回答要么就是不知道,要么就是自己去查app了,觉得这样有时候就缺少了一些互动的乐趣了。
于是就在想,如果有个能爬取电影咨询并能自动回复的东东是不是觉得有点小惊喜呢?
(效果如下)
(后面有完整的效果)
也是前一阵闲来无事,想到这就搞了个简单的小工具,实现了在微信上实时爬取网站电影咨询的功能。这样子,以后就可以偶尔给给妹子来个小惊喜,没准儿就投怀送抱了呢。哈哈,博主也是开玩笑,其实就是觉得好玩,撸起袖子就是一顿敲。
----------------------------------------------------------------------------------------------------
功能分析
好了,让我们看看是怎么个一回事。
网站电影的信息来源于豆瓣,都说豆瓣评分很公正客观,所以就选了这个作为目标源了。
目标功能:
- 用户输入任何带有电影字样的话(如:看电影),自动跳转到页面,提供 所有电影分类供用户选择。
- 用户选择任意一个类型后,分别反馈给用户按热度、时间、评论顺序排列的三份前十电影表单(电影名 评分)。
- 用户根据提供的电影,输入任意一个电影名后,将反馈给用户关于该电影的相关详细信息表单。
- 要求用户可以再次输入任意电影类型去搜其它电影或者此类型的任意其它电影。
网站页面分析:
博主看到,这个页面的这些电影类型都是动态的信息(红色框),因此不能使用常规的request方法舒服的爬取了,这里将使用Selenium自动化测试工具来解决动态页面的爬取(之后会开一篇分享Selenium如何使用)。
这是点击电影进去后看到的详细信息,这些信息是静态的,在源码中有很好的体现,因此详细信息的爬取使用前几篇分享过的request方法解析,request方法详见下面:
- Python爬虫之urllib库—爬虫的第一步
- Python爬虫之urllib库—进阶篇
页面抓取分析:
抓取信息博主使用了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)
还有很多地方需要改进和完善,在此与大家先分享,仅供参考,更多精彩内容后续分享。
----------------------------------------------------------------------------------------------------