第十四章 scrapy框架之基础

文章目录

  • 1. 爬虫简介
  • 2. 爬虫工作流程
  • 3. 各部件的作用
  • 4. scrapy的安装
  • 5. scrapy的使用
    • 1. 创建项目
    • 2. 进入项目
    • 3. 创建爬虫
    • 4. 修改 爬虫脚本名.py 文件
    • 5. 数据解析
    • 6. 把数据放在pipline中进行存储
    • 7. 运行爬虫

1. 爬虫简介

  • scrapy是将爬虫的内容工程化
  • 可以通用与不同的网站
  • Scrapy到目前为止最流行的爬虫框架
  • scrapy的特点:速度快,简单,可扩展性强.
  • scrapy的官方文档: https://docs.scrapy.org/en/latest/
    第十四章 scrapy框架之基础_第1张图片

2. 爬虫工作流程

  1. 爬虫中起始的url构造成request对象,并传递给调度器
  2. 引擎从调度器中获取到request对象.然后交给下载器
  3. 由下载器来获取到页面源代码,并封装成response对象.并回馈给引擎
  4. 引擎将获取到的response对象传递给spider ,由 spider对数据进行解析(parse).并回馈给引擎
  5. 引擎将数据传递给pipeline进行数据持久化保存或进一步的数据处理.
  6. 在此期间如果spider中提取到的并不是数据.而是子页面url.可以进一步提交给调度器,进而重复步骤过程

3. 各部件的作用

  1. 引擎(engine)

    scrapy的核心,所有模块的衔接,数据流程梳理

  2. 调度器(scheduler)

本质上这东西可以看成是一个队列.里面存放着一堆我们即将要发送的请求.可以看成是一个url的容器.它决定了下一步要去爬取哪一个url.通常我们在这里可以对url进行去重操作.

  1. 下载器(downloader)

它的本质就是用来发动请求的一个模块.小白们完全可以把它理解成是一个get_page sourcel的功能.只不过返回的是一个response对象.

  1. 爬虫(spider)

这是我们要写的第一个部分的内容,负责解析下载器返回的response对象.从中提取到我们需要的数据

  1. 管道(pipeline)

这是我们要写的第二个部分的内容,主要负责数据的存储和各种持久化操作.

4. scrapy的安装

pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

pip直接安装失败可以一次安装以下包

  1. 安装wheel
pip install wheel
  1. 下载twisted的包 https://www.Ifd.uci.edu/~gohlke/pythonlibs/#twisted
    在这里插入图片描述
  2. 用wheel安装twisted
pip install twisted_21.7.0_py3_none_any.whl
  1. 安装pywin32
pip install pywin32
  1. 安装scrapy
pip install scrapy

5. scrapy的使用

1. 创建项目

创建项目文件夹,open in Terminal
第十四章 scrapy框架之基础_第2张图片

scrapy startproject 项目名称 

2. 进入项目

cd 项目名称

3. 创建爬虫

scrapy genspider 爬虫脚本名 需要爬取网站的域名

4. 修改 爬虫脚本名.py 文件

修改start_urls,修改成你要抓取的那个页面

5. 数据解析

  • 最后使用yield返回数据,把数据交给pipline来进行持久化数据(节省内存,提升性能)
  • extract() 返回列表
  • extract_first() 返回一个数据
    def parse(self, response):
        div_lst = house_name = response.xpath("//ul[@class='pList rentList']/li/div[2]")
        for i in div_lst:
            house_name = i.xpath("./h3/a/text()").extract()
            house_msg = i.xpath("./div[1]/p[1]/text()").extract()[0].strip().split(" · ")
            dic = {
                "house_name":house_name,
                "huxing ": house_msg[0],
                "mianji ":house_msg[1],
                "chaoxiang" : house_msg[2],
                "louceng" : house_msg[3],
                "zhaungxiu" :house_msg[4]
            }
            yield dic

6. 把数据放在pipline中进行存储

  • pipline默认不开启,需要到sittings中去开启
    取消注释,可以设置管道的优先级,数字越小优先级越高
ITEM_PIPELINES = {
   "direct.pipelines.DirectPipeline": 300,
}
class DirectPipeline:
    def process_item(self, item, spider):
        print(item)
        return item

7. 运行爬虫

  • 运行爬虫之前修改日志打印的级别,便于后续查看信息
    settings文件中添加 LOG_LEVEL = ‘WARNING’
  • 日志级别 DEBUG、INFO、WARNING、ERROR、CRITICAL
scrapy crawl 爬虫脚本名

你可能感兴趣的:(scrapy)