scrapy基础
scrapy-1
一、简介
1.1、安装
pip install scrapy
1.2、爬虫流程
1.3、scrapy流程,文字解释
首先通过spider(爬虫)组件构建request对象,并将request对象经由scrapy Engine(scrapy 引擎) 发送给Scheduler(调度器),调度器对request对象进行整理,安排。经过 下载中间件到达下载器,下载器请求网页,返回response对象,由scrapy Engine(scrapy 引擎) 发送给爬虫组件进行数据提取,将提取出的数据发送给 Item Pipeline 进行数据的处理或者分析。
下载中间件:
- 对request对象进行修改,比如可以在此处设置代理,添加cookies,对请求头进行修改。
- 封装响应,则该请求不会交由下载器,而是直接返回,比如使用selenium访问网页,再构建response对象直接返回。
爬虫中间件:功能类似于下载中间件,但下载中间件更加常用。
二、常用命令
2.1、创建项目
scrapy startproject baidu
2.2、创建一个爬虫
scrapy genspider baidu_demo #爬虫名 www.baidu.com#限定域
2.3、爬虫文件解释
# -*- coding: utf-8 -*-
import scrapy
class BaiduDemoSpider(scrapy.Spider):
name = 'baidu_demo' #爬虫名
allowed_domains = ['www.baidu.com'] #允许爬取的域名
start_urls = ['http://www.baidu.com/'] #初始url
def parse(self, response): #对返回的响应进行解析
pass
2.4、settting.py配置文件重要配置参数
#USER_AGENT = 'baidu (+http://www.yourdomain.com)' #配置USER-AGENT
ROBOTSTXT_OBEY = False #是否遵循robots协议
#CONCURRENT_REQUESTS = 32 #同一时间的发送请求数 默认16
#DOWNLOAD_DELAY = 3 #向同一个网站发送请求的间隔,默认0
#向同一个域名或者同一个ip同时发送的请求数,二选一。
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
#COOKIES_ENABLED = False #是否保存cookies,默认保存
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#} #默认请求头,按照需要更改。
#SPIDER_MIDDLEWARES = {
# 'baidu.middlewares.BaiduSpiderMiddleware': 543,
#} #爬虫中间件是否可用,数字越小优先级越高。
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
# 'baidu.middlewares.BaiduDownloaderMiddleware': 543,
#} #下载中间件是否可用,数字越小优先级越高。
#ITEM_PIPELINES = {
# 'baidu.pipelines.BaiduPipeline': 300,
#} #配置 ITEM_PIPELINES(处理解析后的数据),是否可用,数字越小优先级越高。
2.5、简单示例
# -*- coding: utf-8 -*-
import scrapy
class BaiduDemoSpider(scrapy.Spider):
name = 'baidu_demo'
allowed_domains = ['www.baidu.com']
start_urls = ['http://www.baidu.com/']
def parse(self, response):
with open('../baidu.html', 'w', encoding='utf-8') as file:
file.write(response.text)
执行爬虫
scrapy runspider baidu_demo(#爬虫名) [可选参数]
可选参数
-a 设置该爬虫的参数 格式:name=value
-o 输出文件 常用文件类型:csv、json、xml、pickle
-logfile=file(指定日志文件)
--nolog 不输出日志
-L Level(日志等级,默认DEBUG)