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框架(一)的更多相关文章

  1. Python爬虫Scrapy框架入门(2)

    本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...

  2. Python爬虫Scrapy框架入门(1)

    也许是很少接触python的原因,我觉得是Scrapy框架和以往Java框架很不一样:它真的是个框架. 从表层来看,与Java框架引入jar包.配置xml或.property文件不同,Scrapy的模 ...

  3. Scrapy框架使用—quotesbot 项目(学习记录一)

    一.Scrapy框架的安装及相关理论知识的学习可以参考:http://www.yiibai.com/scrapy/scrapy_environment.html 二.重点记录我学习使用scrapy框架 ...

  4. Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解

    这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...

  5. Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理

    这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的在python3上运行Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是 ...

  6. python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

    操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...

  7. 一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  8. 安装scrapy框架的常见问题及其解决方法

    下面小编讲一下自己在windows10安装及配置Scrapy中遇到的一些坑及其解决的方法,现在总结如下,希望对大家有所帮助. 常见问题一:pip版本需要升级 如果你的pip版本比较老,可能在安装的过程 ...

  9. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...

  10. 利用scrapy框架进行爬虫

    今天一个网友问爬虫知识,自己把许多小细节都忘了,很惭愧,所以这里写一下大概的步骤,主要是自己巩固一下知识,顺便复习一下.(scrapy框架有一个好处,就是可以爬取https的内容) [爬取的是杨子晚报 ...

随机推荐

  1. 前端vue如何下载或者导出word文件和excel文件

    前端用vue怎么接收并导出文件 window.location.href = "excel地址" 如果是 get 请求,那直接换成 window.open(url) 就行了 创建一 ...

  2. Ztree树增删改查菜单,遇到的问题总结

    一.引言 我今天做了一个Ztree树增删改查菜单的功能.其中遇到了很多坑爹的问题,和大家讲述一下. 二.代码展示 1.Ztree树前台代码 <%@ page language="jav ...

  3. 构建调试Linux内核网络代码的环境MenuOS系统

    构建MenuOS系统 1.将指定文件拷贝到本地: git clone https://github.com/mengning/linuxnet.git 此过程可能需要输入github账号和密码. 2. ...

  4. ajax规范写法

    $.ajax({ url: "http://1.1.1.1/api/v2/user/inviters", //接口 type: "post", //GET或PO ...

  5. C#程序编写高质量代码改善的157个建议【13-15】[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]

    前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议13.为类型输出格式化字符串 建议14.正确实现浅拷贝和深 ...

  6. imageView的使用

    转自:http://www.runoob.com/ios/att-ios-ui-imageview.html 图像视图用于显示单个图像或动画序列的图像. 重要的属性 image highlighted ...

  7. Spring Boot缓存Ehcache

    Spring Boot 整合 Ehcache   修改 pom 文件 <!-- Spring Boot 缓存支持启动器 --> <dependency> <groupId ...

  8. Java多态之向上转型

    目录 Java多态之向上转型 多态的优点 向上转型 概念 向上转型好在哪 Java多态之向上转型 多态性是面向对象的第三大特征. 多态的优点 改善代码的组织结构和可读性. 能够创建可扩展的程序.(随时 ...

  9. 深入理解 Java 泛型

  10. tomcat安装与环境变量配置

    1.安装tomcat 2.找到tomcat安装路径的bin文件夹 → 打开 startup.bat 3.打开浏览器输入网址 http://localhost:8080 4.配置CATALINA_BAS ...