Scrapy框架(一)

Scrapy框架(一)

国内镜像源:

阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.doubanio.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

简介:

requests 虽然优雅强大,但它不是并发的,requests.get()处于阻塞状态,等待响应数据接受完成;如果要实现多线程,需要我们手动写多线程。

scrapy框架自带并发(默认16个线程) 去重 调度;Scrapy使用了Twisted 异步网络库来处理网络通讯。

scrapy框架 是用Twisted编写的,Twisted是一个流行的事件驱动的Python网络框架。它使用非阻塞(也成为异步)代码实现并发。

安装

windows安装
 # cmd命令 pip install scrapy -i https://pypi.doubanio.com/simple ? python -m pip install scrapy    # 如果报错用这个

如果失败(是因为scrapy是依赖Twisted的,而twisted需要c++的环境):

下载跟你python版本对应的版本,然后

 cd D:\QMDownload # cd到你刚才下载的文件的路径,再用下面命令安装 Twisted的文件 ? pip install Twisted-19.7.0-cp36-cp36m-win_amd64.whl

Ubantu安装:
 # 首先安装依赖库 sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev ? # 如果你想在python3上安装scrapy,你还需要Python3的开发头文件: sudo apt-get install python3-dev ? # 最后在virtualenv中,你可以使用pip安装Scrapy pip install scrapy[==1.6.0] -i https://pypi.tuna.tsinghua.edu.cn/simple # 清华源

基本使用

单个文件方式运行

 # !/usr/bin/env python # -*- coding: utf-8 -*- # @File    : demo.py import os import scrapy ? class MySpider(scrapy.Spider):     name = ‘spider1‘    # 爬虫名          # 初始化地址, 不会考虑域名范围的     start_urls = [‘https://httpbin.org/get‘]        # 启动时Request会自动第一个访问该url          def parse(self, response):         """处理response对象的方法"""         print(response.text, ‘======demo演示=====‘)          # 运行: cd 到该文件所在路径 scrapy runspider demo.py    # 其实命令运行还是调用了框架的依赖(调度器)

项目方式

创建项目

 $ scrapy startproject project_name $ tree > dir           # 同linux的 ls 查看当前路径下文件

创建爬虫文件

 $ cd project_name $ scrapy genspider spider_name website_domain

运行爬虫

 $ scrapy crawl spider_name      # 运行爬虫项目;在项目根目录下运行(即配置文件所在路径) ? $ scrapy runspider spider_file  # 运行爬虫文件; 要在爬虫文件所在的路径下运行该命令

查看其他:

 $ scrapy list ? # 查看可以使用的template scrapy genspider -l # 查看template 的内容 scrapy genspider -d basic ? # 检查spider scrapy check -l scrapy check ? # 查看页面返回结果 scrapy fetch --nolog --headers https://www.danke.com/room/bj ? # 用浏览器打开页面 scrapy view https://www.danke.com/room/bj ? # 命令行执行scrapy scrapy shell https://www.danke.com/room/bj ? # 对url进行分析 scrapy parse <url> [options]

目录介绍

  • scrapy.cfg : 项目的配置文件

  • myscrapy:项目

  • myscrapy/items.py:项目使用的item文件

  • myscrapy/pipelines.py: 项目中的pipelines文件.

  • myscrapy/settings.py: 项目的设置文件.

  • myscrapy/spiders/: 放置spider代码的目录.

scrapy 组件

组件解释功能/作用
Spiders爬虫程序处理response对象,解析响应、提取需要的数据;并将需要跟进的URL提交给引擎
Engine引擎负责不同组件之间的通信、数据传递
Scheduler调度器接收Request请求,整理排队,加入队列
Downloader下载器负责引擎发送过来的Request请求 获取web页面的数据,进行下载
Item pipelines管道负责spiders返回的数据,对其处理;进行持久化存储(写入本地or数据库)
SpiderMiddleware爬虫中间件爬虫中间件是位于引擎和爬虫之间的特定的钩子,能够处理传入的响应和传递出去的item和请求。
DownloaderMiddleware下载中间件下载中间件是位于引擎和下载器之间的特定的钩子,它们处理从引擎传递到下载器的请求,以及下载器传递到引擎的响应。

运行流程

数据流

上图显示了Scrapy框架的体系结构及其组件,以及系统内部发生的数据流(由红色的箭头显示。)

Scrapy中的数据流由执行引擎控制,流程如下:

1.首先从爬虫获取初始的请求交给引擎

2.将请求放入调度模块,然后获取下一个需要爬取的请求

3.调度模块返回下一个需要爬取的请求给引擎

4.引擎将请求发送给下载器,依次穿过所有的下载中间件

5.一旦页面下载完成,下载器会返回一个响应包含了页面数据,然后再依次穿过所有的下载中间件。

6.引擎从下载器接收到响应,然后发送给爬虫进行解析,依次穿过所有的爬虫中间件

7.爬虫处理接收到的响应,然后解析出item和生成新的请求,并发送给引擎

8.引擎将已经处理好的item发送给管道组件,将生成好的新的请求发送给调度模块,并请求下一个请求

9.该过程重复,直到调度程序不再有请求为止。

Telent

使用telent终端访问scrapy

# 默认监听本地的6023端口
telnet localhost 6023
快捷名称描述
crawler()Scrapy Crawler (scrapy.crawler.Crawler 对象)
engine()Crawler.engine属性
spider()当前激活的爬虫(spider)
slot()the engine slot
extensions()扩展管理器(manager) (Crawler.extensions属性)
stats()状态收集器 (Crawler.stats属性)
settings()Scrapy设置(setting)对象 (Crawler.settings属性)
est()打印引擎状态的报告
prefs()针对内存调试 (参考 调试内存溢出)
p()pprint.pprint 函数的简写
hpy()针对内存调试
 # 暂停爬虫 telnet localhost 6023 >>> engine.pause() # 恢复爬虫 >>> engine.unpause() # 停止爬虫 >>> engine.stop()

Setting 配置

 # 设置 telnet 的端口 TELNETCONSOLE_PORT = [6023, 6073] # 监听的地址 TELNETCONSOLE_HOST = ‘127.0.0.1‘

 

相关推荐