码迷,mamicode.com
首页 > 其他好文 > 详细

Scrapy框架(一)

时间:2019-12-22 18:29:28      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:依赖库   window   使用   exp   ant   目的   ubantu   pip安装   tin   

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++的环境):

https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载跟你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‘

 

Scrapy框架(一)

标签:依赖库   window   使用   exp   ant   目的   ubantu   pip安装   tin   

原文地址:https://www.cnblogs.com/yelan5222/p/12080274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!