总结了一下两年前学习Python爬虫写的一个小程序,发现程序已经无法运行,在调试更新后终于能够再次运行。
先看一下运行效果和能拿到的数据
爬取电影海报到本地截图:
爬取电影数据截图:
基本思路和运行方法
时光网没有做太多的反爬虫策略,也没有太多的动态代码生成,无论是图片URL还是电影数据,还是比较容易拿到的。
使用框架和数据库:scrapy + MongoDB
测试环境:MacOS+python3
基本思路:
先找到一个电影的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