Scrapy

Scrapy

1.scrapy架构图、核心七组件

 Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。

事件驱动和异步都是通过回调函数实现的。

框架:集成了基础功能的壳子,将基础的可复用轮子造好,让你专注业务逻辑的编写。

例如异步功能已写好,基础流程也写好了,你只需要将每个步骤的核心业务填充就可以运行了。

分成七组件的目的是为了解耦,只有真正的解耦核心业务才能够进行可插拔。

2.详细流程

1.spiders中发出原始Request到Engine中

2.Engine将请求发送至Scheduler进行请求编排及过滤,例如url去重。

3.编排好的url回递给Engine

4.Engine将处理完的Request发送给Downloder,

5.Downloader去真正的请求页面获取响应

6.Engine收到响应后,传递给spiders,因为事件驱动,回调每个request绑定的函数,进行数据解析

7.此时有两种情况

  a)解析出详情页或其他页面的url,重复上面的操作,直至没有requests为止。

  b)将解析出来的数据封装为Item类

8.无论是哪种结果,Engine都可以通过isInstance()判断出来,如果是Item类,就交给ItemPipelines进行持久化。

中间件:

3.环境搭建

Anaconda:https://www.cnblogs.com/gyxpy/p/11810734.html

安装:conda install scrapy

验证:scrapy -h 查看版本以及是否安装成功。

创建项目:scrapy staryproject scrapy_demo

创建spider:  scrapy genspider txvideo www.xxx.com 爬虫源文件壳子创建,进入创建的项目文件夹下执行。

import scrapy


class TxvideoSpider(scrapy.Spider):
  # name属性是爬虫文件的唯一标识,至于类名无所谓,用框架默认生成的即可
    name = 'txvideo'
  # 直接注释掉:约束爬取的url必须在这个域名下,不在的直接被过滤掉了
    allowed_domains = ['www.xxx.com']
  # 初始url,框架自动循环列表元素封装为Request,并且绑定下面的函数parse为回调函数
  # 这些都是框架自动做的
    # 你可以连这个也注释掉,自己重写
  # 建议全部注释掉,重写
    start_urls = ['http://www.xxx.com/']
 
# 重写此方法,手动发出Request并且绑定回调函数 
# 如果只有一个请求,那么就return
# 多个请求要么将封装好的request全部封装到一个列表中
# 要么每个请求前加yield改为生成器,反正框架都是for循环遍历
  def start_request(self):
          # 这个请求对象里面有一切请求信息可以封装
          yield scrapy.Request(url=self.start_urls[0],callback=self.parse)
    def parse(self, response):
        pass

 运行爬虫:scrapy  crawl  txvideo

还可以下面,写一个启动脚本

from scrapy.cmdline import execute

execute("scrapy crawl txvideo --nolog".split())

4.目录详情

  • scrapy.cfg  项目的主配置信息,用来部署scrapy时使用,爬虫相关的配置信息在settings.py文件中。
  • items.py    设置数据存储模板,用于结构化数据,如:Django的Model
  • pipelines    数据处理行为,如:一般结构化的数据持久化
  • settings.py 配置文件,如:递归的层数、并发数,延迟下载等。强调:配置文件的选项必须大写否则视为无效,正确写法USER_AGENT='xxxx'
  • spiders      爬虫目录,如:创建文件,编写爬虫规则

  

看十遍不如自己写一遍!巩固基础,纵横开拓!
原文地址:https://www.cnblogs.com/gyxpy/p/13637763.html