1. 什么是scrapy 框架?<br />Scrapy是一个为了爬取网站数据, 提取结构性数据而编写的应用框架, 非常出名, 非常强悍, 所谓的框架就是一个已经被集成各种功能 ( 高性能异步下载, 分布式, 解析, 持久化等 )的具有很强通用性的项目模版 。对于框架的学习, 重点是要学习其框架的特性 , 各个功能的用法即可。

安装

linux系统

  1. pip install scrapy

windows系统

  1. # 1
  2. pip install whell
  3. # 2
  4. 下载 twisted (scrapy依耐这个模块)
  5. https://www.lfd.uci.edu/~gohlke/pythonlibs/#teisted
  6. 进入下载目录: 复制你下载的文件的名! 如果安装报错 找不到文件, 就使用conda来换切换环境即可
  7. pip install Twisted-20.3.0-cp39-cp39-win_amd64.whl
  8. # 3
  9. pip install pywin32
  10. # 4
  11. pip install scrapy

安装 whell

  1. pip install whell

安装 twisted

下载地址:  https://www.lfd.uci.edu/~gohlke/pythonlibs/#teisted
根据你电脑的python 是3.几的, 就选择 对应的版本, 比如我现在的电脑安装的python是 3.9.7的
那么我就选择 cp39

  • Twisted‑20.3.0‑cp39‑cp39‑win_amd64.whl

image.png
image.png

  1. pip install Twisted-20.3.0-cp39-cp39-win_amd64.whl

如果安装报错 找不到文件, 就使用conda来换切换环境即可

安装pywin32

  1. pip install pywin32

安装 Scrapy

  1. pip install scrapy

image.png
image.png

检测是否安装成功

  1. Scrapy # 按回车, 不报错就表示安装好了

image.png

基础使用

工程目录结构

  • spiders: 爬虫文件夹, 后期是需要在其内部创建一个/ 多个爬虫源文件
  • settings: 核心配置文件

    创建工程 scrapy startproject

创建项目,scrapy startproject FirstPro # FirstPro 是 项目名称

  1. scrapy startproject FirstPro
  2. # cd 到工程目录当中 FirstPro

创建爬虫文件 scrapy genspider

  • 爬虫名称: first
  • 起始URL: www.xxx.com
    1. scrapy genspider first www.xxx.com
    image.png

爬虫文件结构

默认会生成这样的一个模版

  1. # first.py 文件
  2. import scrapy
  3. class FirstSpider(scrapy.Spider):
  4. name = 'first'
  5. allowed_domains = ['www.xxx.com']
  6. start_urls = ['http://www.xxx.com/']
  7. def parse(self, response):
  8. pass
  • name: #爬虫文件名, 爬虫文件对应的唯一标识
  • allowed_domains # 域名限定 , 一般不使用注释掉
  • start_urls : # (重点)起始的URL列表 , 列表中存放的URL会被自动的进行get请求发送

start_urls = ‘[https://www.sougou.com/‘,”https://www.baidu.com”] 如果这里有2个域名, 程序会自动发送请求, 无需我手动书写请求

  • parse(): 专门用来解析数据, 调用的次数, 取决于start_urls 列表的元素
    • response: 请求对应响应的对象

执行工程 scrapy crawl

  1. scrapy crawl first

image.png

robots.txt反爬虫协议

robots.txt是一种反爬虫协议, 在协议中规定了那些身份的爬虫无法爬取的资源有那些!

我们可以选择遵守协议, 也可以不遵守协议, 可在 爬虫配置文件中修改settings.py
**ROBOTSTXT_OBEY=True 改为Flase**
image.png
image.png

settings.py配置文件详解

  • USER_AGENT : 表示全局浏览器UA
  • ROBOTSTXT_OBEY : 表示是否遵循反爬虫协议
  • LOG_LEVEL=”ERROR” : 表示我只想看报错的日记
  • CONCURRENT_REQUESTS =32 :表示手动修改线程数量
  • ITEM_PIPELINES :表示开启管道,里面有对应要开启管道的名称

响应数据解析

  1. import scrapy
  2. class FirstSpider(scrapy.Spider):
  3. name = 'first'
  4. # allowed_domains = ['www.xxx.com']
  5. start_urls = ['https://duanzixing.com/page/2/', 'https://duanzixing.com/page/3/']
  6. def parse(self, response):
  7. # print(response)
  8. article_list = response.xpath('/html/body/section/div/div/article')
  9. for article in article_list:
  10. # 如果selector 调用extract则表述, 将该对象data 属性值取出,返回字符串
  11. #title = article.xpath('./header/h2/a/@title')[0].extract()
  12. # 如果使用列表调用extract()则表示, extract会将列表中每一个列表元素进行extract操作, 返回列表
  13. #title = article.xpath('./header/h2/a/@title').extract()
  14. # 数组类型: 取多个内容
  15. title = article.xpath('./header/h2/a/@title').extract()
  16. # 字符串类型: 只取一个
  17. content = article.xpath('./p[2]/text()').extract_first()
  18. print(title,content)
  19. break;
  20. -----------------------------------------
  21. 家里的猫没看住跑出去了-段子网-最新段子-搞笑段子-微段子-段子网-段子手-段子大全
  22. 家里的猫没看住跑出去了,了无音讯。两个月后带着孩子回家了。我问它:“带着孩子回来什么意思?”它就只用那亮晶晶的眼睛看着我,我瞬间读懂了它的意思,认祖归宗,让我负责。
  23. 记得高一的时候暗恋班上一个女生几个月之后-段子网-最新段子-搞笑段子-微段子-段子网-段子手-段子大全
  24. 记得高一的时候暗恋班上一个女生几个月之后,决定向她表白,但女生以学习为由拒绝了。但我不灰心,知道她喜欢吃甜点,于是我每天都去蛋糕店买点心给她吃,风雨无阻,不管我生病还是有事,从未间断过。终于有一天
  25. ,她胖到了180斤。...

image.png

注意Scrapy是异步多线程

Scrapy是一个异步框架多线程, 异步效果就是由 Twisted实现的

持久化存储

基于终端指令的持久化存储

  • 只可以将parse的返回值进行本次文件的持久化存储
  • 执行指令:scrapy crawl spiderName -o filePath
    1. scrapy crawl spiderName -o filePath

基于管道持久化存储(重点)

pipelines.py文件里有个方法process_item()
它就是来处理持久化存储的

  1. 在爬虫文件中进行数据解析
  2. 将解析的数据存储封装到item类型的对象中

    1. `item.py`文件中 接收
  3. 将item类型的对象提交管道

    1. 直接书写`yield`

yield item #将item对象提交给管道

  1. 管道接收item然后基于process_item方法进行持久化存储操作
  2. 在配置文件中开启管道

    1. ITEM_PIPELINES = {'duanziPro.pipelines.DuanziproPipeline':300,}<br />后面的300数值表示优先级!且数值越小优先级越高