制作Scrapy爬虫,最基础的需要四步:
- 新建项目
scrapy startproject Movies
自动生成一个名为“Movies”的爬虫项目
scrapy genspider getmovies movie.douban.com
自动生成一个名为“getmovies”的爬虫
整个项目目录结构如下: - 定义目标数据
编辑items.py文件,定义需要获取数据的结构,该结构操作类似字典操作
import scrapy
class MoviesItem(scrapy.Item):
UserName = scrapy.Field()
UserID = scrapy.Field()
MovieName = scrapy.Field()
MovieID = scrapy.Field()
MovieScore = scrapy.Field()
MovieComment = scrapy.Field()
3. 制作爬虫
编辑getmovies.py文件,定义了一个爬虫类(默认继承于scrapy.Spider基类)
name:爬虫名称,用于识别项目内的不同爬虫,可用scrapy list 获取整个项目爬虫名列表
allowed_domains:爬虫允许的域范围,超过域范围的数据不再抓取
start_urls:列表数据,开始抓取的URL地址
parse方法:解析每次抓取数据结果(在该方法内实现爬虫数据的解析工作,如果是多层爬取,该方法还将产生下级爬取URL)
import scrapy
class GetmoviesSpider(scrapy.Spider):
name = 'getmovies'
allowed_domains = ['movie.douban.com']
start_urls = ['http://movie.douban.com/']
def parse(self, response):
pass
parse方法中必须返回item给管道,可以用yield item将parse变成生成器
4. 存储数据
编辑pipelines.py文件,用方法process_item处理每个解析后的item数据,可以存入数据库,也可以存入文件
class MoviesPipeline(object):
def process_item(self, item, spider):
return item
关于scrapy的其他事项:
1. 设置
编辑settings.py文件,可以修改默认爬虫设置
USER_AGENT='所有爬虫发出请求的user_agent'
ROBOTSTXT_OBEY='爬虫是否遵循网站爬虫协议robots.txt规定';建议关闭
CONCURRENT_REQUESTS='请求并发数'
DOWNLOAD_DELAY='下载延迟(秒)'
COOKIES_ENABLED='是否禁用Cookie'
DEFAULT_REQUEST_HEADERS='默认请求报头'
SPIDER_MIDDLEWARES='爬虫中间件,所有定义的爬虫中间件都必须在此注册启用才有效,值大小范围0-1000,越小优先级越高'
DOWNLOADER_MIDDLEWARES='下载中间件'
ITEM_PIPELINES='管道文件,必须启用管道才能有效'
2. 中间件
编辑middlewares.py文件,可以为项目添加中间件
3. 命令操作
常用的:
scrapy list获取爬虫列表
scrapy shell用于进入shell来测试爬取结果,验证解析
scrapy crawl getmovies 执行具体一个爬虫进行爬取并处理