异步处理框架,可配置和可扩展程度非1 常高,Python中使用最广泛的爬虫框架
安装:
Ubuntu安装
1、安装依赖包
sudo apt-get install libffi-dev libssl- dev libxml2-dev python3-dev libxslt1-dev zlib1g-dev
sudo pip3 install -I -U service_identity
2、安装scrapy框架
sudo pip3 install Scrapy
windows安装
python -m pip install Scrapy
一、概述 1. 五大组件引擎(Engine) :整个框架核心
调度器(Scheduler) :维护请求队列
下载器(Downloader):获取响应对象
爬虫文件(Spider) :数据解析提取
项目管道(Pipeline):数据入库处理
下载器中间件(Downloader Middlewares) : 引擎 ->下载器,包装请求(随机代理等)
蜘蛛中间件(Spider Middlewares) : 引擎 -> 爬虫文件,可修改响应对象属性
2. 项目启动由引擎向爬虫程序索要第一个要爬取的URL,交给调度器去入队列
调度器处理请求后出队列,通过下载器中间件交给下载器去下载
下载器得到响应对象后,通过蜘蛛中间件交给爬虫程序
爬虫程序进行数据提取:
数据交给管道文件去入库处理
对于需要继续跟进的URL,再次交给调度器入队列,依次循环
3. 常用命令1、创建爬虫项目
scrapy startproject 项目名
2、创建爬虫文件
scrapy genspider 爬虫名 域名
3、运行爬虫
scrapy crawl 爬虫名
4. 项目目录 Baidu # 项目文件夹 ├── Baidu # 项目目录 │ ├── items.py # 定义数据结构 │ ├── middlewares.py # 中间件 │ ├── pipelines.py # 数据处理 │ ├── settings.py # 全局配置文件 │ └── spiders │ ├── baidu.py # 爬虫文件 └── scrapy.cfg # 项目基本配置文件 5. 全局配置文件1、定义User-Agent
USER_AGENT = 'Mozilla/5.0'
2、是否遵循robots协议,一般设置为False
ROBOTSTXT_OBEY = False
3、最大并发量,默认为16
CONCURRENT_REQUESTS = 32
4、下载延迟时间
DOWNLOAD_DELAY = 1
5、请求头,此处也可以添加User-Agent
DEFAULT_REQUEST_HEADERS={}
6、项目管道
ITEM_PIPELINES={ '项目目录名.pipelines.类名':300 } 6.创建爬虫项目步骤1、新建项目 :scrapy startproject 项目名
2、cd 项目文件夹
3、新建爬虫文件 :scrapy genspider 文件名 域名
4、明确目标(items.py)
5、写爬虫程序(文件名.py)
6、管道文件(pipelines.py)
7、全局配置(settings.py)
8、运行爬虫 :scrapy crawl 爬虫名
1、创建begin.py(和scrapy.cfg文件同目录)
2、begin.py中内容:
Pycharm运行爬虫
创建run.py(和scrapy.cfg文件同目录)
run.py中内容:
from scrapy import cmdline cmdline.execute('scrapy crawl maoyan'.split()) 8. 示例爬取百度首页的标签--百度一下,你就知道
步骤:
创建项目Baidu 和 爬虫文件baidu
scrapy startproject Baidu # 创建项目 cd Baidu scrapy genspider baidu # 创建爬虫文件
编写爬虫文件baidu.py,xpath提取数据
# -*- coding: utf-8 -*- import scrapy class BaiduSpider(scrapy.Spider): name = 'baidu' allowed_domains = ['www.baidu.com'] start_urls = ['http://www.baidu.com/'] def parse(self, response): result = response.xpath('/html/head/title/text()').extract_first() print('*'*50) print(result) print('*'*50)
全局配置文件settings.py
USER_AGENT = 'Mozilla/5.0' ROBOTSTXT_OBEY = False DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', }
创建run.py
from scrapy import cmdline cmdline.execute('scrapy crawl baidu'.split())
启动爬虫
直接运行run.py即可
二、奇淫技巧节点对象.xpath('')
列表,元素为选择器 [']
列表.extract() :序列化列表中所有选择器为Unicode字符串 ['A','B','C']
列表.extract_first() 或者 get() :获取列表中第1个序列化的元素(字符串)
pipelines.py中必须由1个函数叫process_item
def process_item(self,item,spider): return item ( * 此处必须返回 item )
日志变量及日志级别(settings.py)
日志相关变量
LOG_LEVEL = ''
LOG_FILE = '文件名.log'
日志级别
5 CRITICAL :严重错误
4 ERROR :普通错误
3 WARNING :警告
2 INFO :一般信息
1 DEBUG :调试信息
管道文件使用
在爬虫文件中为items.py中类做实例化,用爬下来的数据给对象赋值
from ..items import MaoyanItem item = MaoyanItem()管道文件(pipelines.py)
开启管道(settings.py)
ITEM_PIPELINES = { '项目目录名.pipelines.类名':优先级 }
创建项目文件,爬虫文件
scrapy startproject Maoyan cd Maoyan scrapy genspider maoyan https://maoyan.com创建运行文件
# run.py from scrapy import cmdline cmdline.execute('scrapy crawl maoyan'.split())