21番茄网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 21番茄网
查看: 1093|回复: 2

爬虫框架Scrapy再总结

[复制链接]

720

主题

940

帖子

3116

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3116
发表于 2021-1-12 09:04:26 | 显示全部楼层 |阅读模式
爬虫框架Scrapy再总结

1.Scrapy框架的安装
2.Scrapy的简单使用
3.Scrapy的整体架构和组成
4.Scrapy的中间件详解

爬虫框架Scrapy再总结  Python爬虫精进 1
                               
登录/注册后可看大图


二、Scrapy的简单使用
      不管是我们现在所说的Scrapy框架还是其他的爬虫框架都是使爬虫功能模块话,把各种爬虫需求分开来,你只要使用你的项目所需要的模块就够了!

你还需要知道这么几条常用的命令:

创建项目scrapy startproject xxx
进入项目cd xxx #进入某个文件夹下
创建爬虫scrapy genspider xxx(爬虫名) xxx.com (爬取域)
生成文件scrapy crawl xxx -o xxx.json (生成某种类型的文件)
运行爬虫scrapy crawl XXX
列出所有爬虫scrapy list
获得配置信息scrapy settings [options]

爬虫框架Scrapy再总结  Python爬虫精进 line2
                               
登录/注册后可看大图


我们来看看Scrapy项目下都有些什么

scrapy.cfg: 项目的配置文件
tutorial/: 该项目的python模块。在此放入代码(核心)
tutorial/items.py: 项目中的item文件.(这是创建容器的地方,爬取的信息分别放到不同容器里)
tutorial/pipelines.py: 项目中的pipelines文件.
tutorial/settings.py: 项目的设置文件.(我用到的设置一下基础参数,比如加个文件头,设置一个编码)
tutorial/spiders/: 放置spider代码的目录. (放爬虫的地方

容器(items)的定义容器不一定是一开始全部都定义好的可以跟随项目的更新一点点向里面添加
import scrapy
class DmozItem(scrapy.Item): #创建一个类,继承scrapy.item类,就是继承人家写好的容器
    title = scrapy.Field() # 需要取哪些内容,就创建哪些容器
    link = scrapy.Field()
    desc = scrapy.Field()


一个简单的爬虫小例子
import scrapy
class DmozSpider(scrapy.Spider): # 继承Spider类
    name = "dmoz" # 爬虫的唯一标识,不能重复,启动爬虫的时候要用
    allowed_domains = ["dmoz.org"] # 限定域名,只爬取该域名下的网页
    start_urls = [ # 开始爬取的链接
        "https://www.baidu.com/"
    ]
    def parse(self, response):
        filename = response.url.split("/")[-2] # 获取url,用”/”分段,获去倒数第二个字段
        with open(filename, 'a') as f:
            f.write(response.body) # 把访问的得到的网页源码写入文件


里面的parse方法,这个方法有两个作用:

1.负责解析start_url下载的Response 对象,根据item提取数据(解析item数据的前提是parse里全部requests请求都被加入了爬取队列)
2.如果有新的url则加入爬取队列,负责进一步处理,URL的Request 对象

这两点简单来说就是编写爬虫的主要部分

那么启动爬虫时发生了什么?
      Scrapy为Spider的 start_urls 属性中的每个url创建了Request 对象,并将 parse 方法作为回调函数(callback)赋值给了requests,而requests对象经过调度器的调度,执行生成response对象并送回给parse() 方法进行解析,所以请求链接的改变是靠回调函数实现的。
yield scrapy.Request(self.url, callback=self.parse)




上一篇:写爬虫的流程
下一篇:爬虫进阶路线指引
回复

使用道具 举报

720

主题

940

帖子

3116

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3116
 楼主| 发表于 2021-1-12 09:29:43 | 显示全部楼层
三、Scrapy框架的整体架构和组成

图中绿色的是数据的流向
我们看到图里有这么几个东西,分别是
Spiders:爬虫,定义了爬取的逻辑和网页内容的解析规则,主要负责解析响应生成结果新的请求
Engine:引擎,处理整个系统的数据流处理,出发事物,框架的核心。
Scheduler:调度器,接受引擎发过来的请求,并将其加入队列中在引擎再次请求时将请求提供给引擎
Downloader:下载器,下载网页内容,并将下载内容返回给spider
ItemPipeline:项目管道,负责处理spider从网页中抽取的数据,主要是负责清洗验证数据库中存储数据
Downloader Middlewares:下载中间件,是处于Scrapy的Request和Requesponse之间的处理模块
Spider Middlewares:spider中间件,位于引擎和spider之间的框架,主要处理spider输入的响应和输出的结果及新的请求middlewares.py里实现


  Python爬虫精进 092708nllo6iwyooz65wlf


最后我们来顺一下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(ps,只有调度器中不存在request时,程序才停止,及时请求失败scrapy也会重新进行请求)

回复

使用道具 举报

720

主题

940

帖子

3116

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3116
 楼主| 发表于 2021-1-12 09:50:34 | 显示全部楼层
四、Scrapy的中间件详解

来自:https://www.jianshu.com/p/cecb29c04cd2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|21番茄网 ( 粤ICP备10099428号 ) 奇远富

GMT+8, 2025-2-23 01:04 , Processed in 4.097257 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表