Python3 爬取时光网电影海报和电影数据

1,019 阅读2分钟
原文链接: zhuanlan.zhihu.com

总结了一下两年前学习Python爬虫写的一个小程序,发现程序已经无法运行,在调试更新后终于能够再次运行。

先看一下运行效果和能拿到的数据

爬取电影海报到本地截图:

爬取电影数据截图:

接下来简单说一下思路和运行方法

时光网没有做太多的反爬虫策略,也没有太多的动态代码生成,此文的数据还是比较容易拿到的。只是做一个简单的学习参考使用。

使用框架和数据库:scrapy + MongoDB

测试环境:MacOS+python3

运行方法:Danielyan86/Movie-scrapy

基本思路:

先找到一个电影的URL连接,发现是域名加上一个id。比如"http://movie.mtime.com/31889/", 但是通过测试我们发现这个id并不是从0开始的一个连续id,因此我们在设定了一个其实和结束id之后,需要再代码里面处理返回页面为空的情况。

for num in range(40000, 50000):
        start_urls.append("http://movie.mtime.com/{0}/".format(num))

要注意如果间隔数目过大的话,爬取时间可能需要很久

此爬虫分成两个小爬虫:

数据爬虫(mtime):

拿到一部电影的标题之后,简单的把电影年份和名字存入本地的MongoDB数据库

图片爬虫(mPicture):

对scrapy自带的图片爬虫进行了简单的重写,下载过程中会对保存图片生成一个唯一的hash id最为图片名字, 这样可以避免图片重复下载,因为scrapy自带的多线程下载机制,下载过程可能会把带宽占满。因为是抓取一个页面所有图片然后通过图片尺寸进行筛选,所以有些图片不一定是海报图片。

项目源码和详细使用:

https://github.com/Danielyan86/Movie-scrapygithub.com