综述:先介绍开发环境,在介绍从豆瓣电影上面爬取电影的电影名称,电影信息,电影剧照等信息,最终效果是以电影名称为文件夹名,文件夹包含一个txt文件和许多张剧照。如下图所示1是电影名,2是电影信息,3是各种剧照
1.Python爬虫框架
比较知名框架的是Scrapy 和PySpider。
PySpider | 上手更简单,操作更加简便,增加了 WEB 界面,开发效率高,集成了phantomjs,可以用来处理复杂的js渲染的页面。 |
Scrapy | 自定义程度高,比PySpider更底层一些,适合学习研究,需要学习的相关知识多,可以自己拿来研究分布式和多线程等等。 |
所以综上所述我选择的爬虫框架是PySpider。
2.PySplider安装配置
2.1 安装pip
pip是python的包管理工具,类似RedHat里面的yum,通过pip可以快速下载安装python软件隐藏了背后复杂的下载安装的过程
下载地址:下载pip安装包
2.2 安装phantomjs
phantomjs是一个浏览器内核程序,可以在爬虫开发过程中,模拟浏览器运行js,简化js处理过程
下载地址:phantomjs官网
2.3 使用pip安装pyspider
pip install pyspider
2.4 运行pyspider
pyspider all
2.5 通过浏览器访问pyspider:http://localhost:5000
3.具体代码
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2018-11-29 15:50:57
# Project: DBDY_01
from pyspider.libs.base_handler import *
import os;
class Handler(BaseHandler):
base_dir = "D:\\mov"
crawl_config = {
}
@every(minutes=24 * 60)
def on_start(self):
self.crawl('https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%BB%8F%E5%85%B8&sort=rank&page_limit=30&page_start=0',
validate_cert=False,
callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
marr = response.json["subjects"]
//最终数据的存储路径,经常要用到所以提取在最外面,方便使用
for m in marr:
mv_id=m["id"]
self.crawl(m["url"],
validate_cert=False,
callback=self.mv_page,