Scrapy框架简介

-Spider MiddlewaresSpider只对response进行过滤处理,不对数据进行处理

初始化

创建项目

1
scrapy startproject myspider 

生成爬虫

1
2
3
scrapy genspider response response.cn
#@response 爬虫名称
#@response.cn 爬虫域名范围

在生成的response.py文件中包含以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding: utf-8 -*-
import scrapy


class PixviSpider(scrapy.Spider):
name = 'pixvi' #爬虫名
allowed_domains = ['pixiv.net'] #爬虫范围,需要爬取的url地址你必须在这个域名下
start_urls = ['http://www.pixiv.net/'] #初始响应网站,需要有内容爬取的内容

def parse(self, response):#parse函数名称不能修改
#处理start_ urls对应的响应
item = response.xpath() #返回的是一个含有selector对象的列表
yield item#生成器可以遍历不占用太多空间

运行爬虫

在项目文件夹下运行

1
scrapy crawl response

pipline

生成的item数据会传入pipline中,在使用pipline之前要先在settings.py中去掉

可以创建多个pipline:

​ 1.可能有多个爬虫

​ 2.可能爬取的数据需要不同的处理(如写入不同的数据库)

1
2
3
class Test1Pipeline(object):
def process_item(self, item, spider):#实现存储方法,函数名同样不能改变
return item

如有多个pipline,每个pipline都要return item以传入下一个管道,不能缺少return

1
2
3
#ITEM_PIPELINES = {
# 'test1.pipelines.Test1Pipeline': 300,
#}

的注释。

300表示举例pipline的远近,越小越先执行

若有多个爬虫,则可以

​ 1.在item中加入item['come_from'] = 'spider1'

if item['come_from'] == 'spider1':

​ …

​ 2.在pipline.py中直接用

if spider.name == 'spider1':

​ …

logging模块

logging模块是输出日志的模块

可以在settings.py中加入LOG_LEVEL = 'WARNING'来使程序输出warning及以上级别的日志

logging模块可以代替print输出数据并知晓数据来自哪一个文件

1
2
3
4
import logging

logger = logging.getlogger(__name__)
logger.warning(item)

运行结果

1
2
3
4
5
6
7
2019-04-08 17:30:19 [test1.spiders.pixvi] WARNING: {'come_from': 'pixvi'}
2019-04-08 17:30:19 [test1.pipelines] WARNING: ----------
2019-04-08 17:30:19 [test1.spiders.pixvi] WARNING: {'come_from': 'pixvi'}
2019-04-08 17:30:19 [test1.pipelines] WARNING: ----------
2019-04-08 17:30:19 [test1.spiders.pixvi] WARNING: {'come_from': 'pixvi'}
2019-04-08 17:30:19 [test1.pipelines] WARNING: ----------
...

即可以打印输出内容的时间,文件来源,等级,内容

在settings.py中加入LOG_FILE = ./XXX.log即可把日志内容保存在文件中