scrapy
框架
绿色箭头是数据的流向,各个模块作用如下:
Spiders
:爬虫,定义了爬取的逻辑和网页内容的解析规则,主要负责解析响应并生成结果和新的请求;Engine
:引擎,框架的核心,处理整个系统的数据流处理;Scheduler
:调度器,接受引擎发过来的请求,并将其加入队列中,在引擎再次请求时将请求提供给引擎;Downloader
:下载器,下载网页内容,并将下载内容返回给spider
;ItemPipeline
:项目管道,负责处理spider
从网页中抽取的数据,主要负责清洗、验证和向数据库存储数据;Downloader Middlewares
:下载中间件,处于Scrapy
的Request
和Requesponse
之间的处理模块;Spider Middlewares
:spider
中间件,位于引擎和spider
之间的框架,主要处理spider
输入的响应和输出的结果及新的请求;
scrapy
框架的整体执行流程如下:
1、spider
的yeild
将request
发送给engine
;
2、engine
对request
不做任何处理发送给scheduler
;
3、scheduler
生成request
交给engine
;
4、engine
拿到request
,通过middleware
发送给downloader
;
5、downloader
获取到response
之后,又经过middleware
发送给engine
;
6、engine
获取到response
之后,返回给spider
,spider
的parse()
方法对获取到的response
进行处理,解析出items
或者requests
;
7、将解析出来的items
或者requests
发送给engine
;
8、engine
获取到items
或者requests
,将items
发送给ItemPipeline
,将requests
发送给scheduler
;
安装及常用命令
安装scrapy
$ sudo pip3 install scrapy
几条常用的命令:
创建项目:scrapy startproject xxx
创建爬虫:scrapy genspider xxx xxx.com
生成某种类型的文件:scrapy crawl xxx -o xxx.json
运行爬虫:scrapy crawl xxx
列出所有爬虫:scrapy list
获得配置信息:scrapy settings [options]
爬虫例子
创建项目:
$ scrapy startproject tutorial
项目目录功能如下:
scrapy.cfg
: 项目的配置文件tutorial/
: 该项目的python
模块tutorial/items.py
: 项目中的item
文件,这是创建容器的地方,爬取的信息分别放到不同容器里;tutorial/pipelines.py
: 项目中的pipelines
文件;tutorial/middlewares.py
:定义Downloader Middlewares
(下载器中间件)和Spider Middlewares
(蜘蛛中间件)的实现;tutorial/settings.py
: 项目的设置文件;tutorial/spiders/
: 放置spider
代码的目录;
容器的定义:
import scrapy
class MaoyanItem(scrapy.Item):
# 需要取哪些内容,就创建哪些容器
index = scrapy.Field()
title = scrapy.Field()
在spiders
文件夹下创建一个maoyan.py
文件,输入如下内容:
# -*- coding: utf-8 -*-
import scrapy
from tutorial.items import MaoyanItem
class MaoyanSpider(scrapy.Spider):
# 爬虫的唯一标识,不能重复,启动爬虫的时候要用
name = "maoyan"
# 限定域名,只爬取该域名下的网页
allowed_domains = ["maoyan.com"]
# 开始爬取的链接
start_urls = ["https://maoyan.com/board/7/"]
def parse(self, response):
dl = response.css('.board-wrapper dd')
for dd in dl:
item = MaoyanItem()
item['index'] = dd.css('.board-index::text').extract_first()
item['title'] = dd.css('.name a::text').extract_first()
yield item
name
:项目的名字。allowed_domains
:允许爬取的域名,比如一些网站有相关链接,域名就和本网站不同,这些就会忽略。start_urls
:是Spider
爬取的网站,定义初始的请求url
,可以多个。parse
方法:是Spider
的一个方法,在请求start_url
后,对网页解析与提取自己想要的东西。parse
方法有两个作用:1、负责解析start_url
下载的Response
对象,根据item
提取数据;2、如果有新的url
则加入爬取队列,负责进一步处理。response
参数:是请求网页后返回的内容,也就是需要解析的网页。
启动爬虫:
$ scrapy crawl maoyan
Scrapy
为Spider
的start_urls
属性中的每个url
创建了Request
对象,并将parse
方法作为回调函数赋值给requests
,而requests
对象经过调度器的调度,执行生成response
对象并送回给parse()
方法进行解析,所以请求链接的改变是靠回调函数实现的。
参考文章
pip升级后Import Error:cannot import name main解决方案
Scrapy官方文档
爬虫框架Scrapy的安装与基本使用
scrapy
scrapy使用
爬虫框架Scrapy个人总结(详细)熟悉
初窥Scrapy
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。