Scrapy介绍

Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。

框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。

Scrapy 使用了 Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

Scrapy架构图

Scrapy Engine(引擎): 用来处理整个系统的数据流处理, 触发事务(框架核心)

Scheduler(调度器): 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面

Item Pipeline(管道):负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

Downloader Middlewares(下载中间件):位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。

Spider Middlewares(调度中间件):介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

Scrapy运行流程

  1. 首先,引擎从调度器中取出一个链接(URL)用于接下来的抓取
  2. 引擎把URL封装成一个请求(Request)传给下载器,下载器把资源下载下来,并封装成应答包(Response)
  3. 然后,爬虫解析Response
  4. 若是解析出实体(Item),则交给实体管道进行进一步的处理。
  5. 若是解析出的是链接(URL),则把URL交给Scheduler等待抓取

安装

Linux安装:

  1. pip3 install scrapy

Windows安装:

  1. # 1. pip3 install wheel
  2.  
  3. # 2. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
  4.  
  5. # 3. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
  6.  
  7. # 4. pip3 install pywin32
  8.  
  9. # 5. pip3 install scrapy

命令行工具

  1. # 1 查看帮助
  2. scrapy -h
  3. scrapy <command> -h
  4.  
  5. # 2 有两种命令:其中Project-only必须切到项目文件夹下才能执行,而Global的命令则不需要
  6. Global commands:
  7. startproject #创建项目
  8. genspider #创建爬虫程序
  9. settings #如果是在项目目录下,则得到的是该项目的配置
  10. runspider #运行一个独立的python文件,不必创建项目
  11. shell #scrapy shell url地址 在交互式调试,如选择器规则正确与否
  12. fetch #独立于程单纯地爬取一个页面,可以拿到请求头
  13. view #下载完毕后直接弹出浏览器,以此可以分辨出哪些数据是ajax请求
  14. version #scrapy version 查看scrapy的版本,scrapy version -v查看scrapy依赖库的版本
  15. Project-only commands:
  16. crawl #运行爬虫,必须创建项目才行,确保配置文件中ROBOTSTXT_OBEY = False
  17. check #检测项目中有无语法错误
  18. list #列出项目中所包含的爬虫名
  19. edit #编辑器,一般不用
  20. parse #scrapy parse url地址 --callback 回调函数 #以此可以验证我们的回调函数是否正确
  21. bench #scrapy bentch压力测试

Scrapy框架官方网址:http://doc.scrapy.org/en/latest

Scrapy中文维护站点:http://scrapy-chs.readthedocs...

目录结构

  1. project_name/
  2. scrapy.cfg # 项目的主配置信息,用来部署scrapy时使用,爬虫相关的配置信息在settings.py文件中。
  3. project_name/
  4. __init__.py
  5. items.py # 设置数据存储模板,用于结构化数据,如:Django的Model
  6. pipelines.py # 项目管道文件,如:一般结构化的数据持久化
  7. settings.py # 配置文件,如:递归的层数、并发数,延迟下载等。
  8. spiders/ # 爬虫目录,如:创建文件,编写爬虫规则
  9. __init__.py
  10. 爬虫1.py
  11. 爬虫2.py
  12. 爬虫3.py

注意:

  1. 一般创建爬虫文件时,以网站域名命名

  2. 默认只能在终端执行命令,为了更便捷操作:

如果想在pycharm中执行需要做:

  1. #在项目目录下新建:entrypoint.py
  2. from scrapy.cmdline import execute
  3. # execute(['scrapy', 'crawl', 'amazon','--nolog']) #不要日志打印
  4. # execute(['scrapy', 'crawl', 'amazon'])
  5.  
  6. #我们可能需要在命令行为爬虫程序传递参数,就用下面这样的命令
  7. #acrapy crawl amzaon -a keyword=iphone8
  8. execute(['scrapy', 'crawl', 'amazon1','-a','keyword=iphone8','--nolog']) #不要日志打印
  9.  
  10. # execute(['scrapy', 'crawl', 'amazon1'])

项目实战

1.创建爬虫应用程序
  1. scrapy startproject Qiubai # 创建项目
  2.  
  3. cd Qiubai # 进入项目目录
  4.  
  5. scrapy genspider qiubai www.qiushibaike.com # 应用名称 爬取网页的起始url

2 编写爬虫文件:在步骤2执行完毕后,会在项目的spiders中生成一个应用名的py爬虫文件,文件源码如下:

  1. import scrapy
  2.  
  3. class QiubaiSpider(scrapy.Spider):
  4. name = 'qiubai' # 应用名称
  5. # 允许爬取的域名(如果遇到非该域名的url则爬取不到数据)
  6. allowed_domains = ['https://www.qiushibaike.com/']
  7. start_urls = ['https://www.qiushibaike.com/'] # 起始爬取的url
  8.  
  9. def parse(self, response):
  10. # xpath为response中的方法,可以将xpath表达式直接作用于该函数中
  11. odiv = response.xpath('//div[@id="content-left"]/div')
  12. content_list = [] # 用于存储解析到的数据
  13. for div in odiv:
  14. # xpath函数返回的为列表,列表中存放的数据为Selector类型的数据。我们解析到的内容被封装在了Selector对象中,需要调用extract()函数将解析的内容从Selecor中取出。
  15. author = div.xpath('.//div[@class="author clearfix"]/a/h2/text()')[0].extract()
  16. content=div.xpath('.//div[@class="content"]/span/text()')[0].extract()
  17.  
  18. # 将解析到的内容封装到字典中
  19. dic={
  20. '作者':author,
  21. '内容':content
  22. }
  23. # 将数据存储到content_list这个列表中
  24. content_list.append(dic)
  25.  
  26. return content_list

3 设置修改settings.py配置文件相关配置,修改内容及其结果如下:

  1. USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #伪装请求载体身份
  2.  
  3. ROBOTSTXT_OBEY = False # 可以忽略或者不遵守robots协议

4 执行爬虫程序:

  1. scrapy crawl 爬虫名称 # 该种执行形式会显示执行的日志信息
  2. scrapy crawl 爬虫名称 --nolog # 该种执行形式不会显示执行的日志信息

最后

今天是情人节,祝大家情人节快乐

有对象的已经去跟对象去约会了,爱学习的才会跟代码相伴(比如我)

送大家一段 python 的情人节代码吧:

  1. print("\n".join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(30, -30, -1)]))

好奇的去copy运行一下吧~

爬虫之Scrapy框架介绍的更多相关文章

  1. 爬虫之Scrapy框架介绍及基础用法

    今日内容概要 爬虫框架之Scrapy 利用该框架爬取博客园 并发编程 今日内容详细 爬虫框架Scrapy 1.什么是框架? 框架类似于房子的结构,框架会提前帮你创建好所有的文件和内部环境 你只需要往对 ...

  2. python爬虫之scrapy框架介绍

    一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等) ...

  3. 爬虫相关-scrapy框架介绍

    性能相关-进程.线程.协程 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. 串行执行 import requests def fetc ...

  4. 第三百二十四节,web爬虫,scrapy模块介绍与使用

    第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了 ...

  5. Python学习---爬虫学习[scrapy框架初识]

    Scrapy Scrapy是一个框架,可以帮助我们进行创建项目,运行项目,可以帮我们下载,解析网页,同时支持cookies和自定义其他功能. Scrapy是一个为了爬取网站数据,提取结构性数据而编写的 ...

  6. Python网络爬虫之Scrapy框架(CrawlSpider)

    目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) ...

  7. Python 爬虫之Scrapy框架

    Scrapy框架架构 Scrapy框架介绍: 写一个爬虫,需要做很多的事情.比如:发送网络请求.数据解析.数据存储.反反爬虫机制(更换ip代理.设置请求头等).异步请求等.这些工作如果每次都要自己从零 ...

  8. selenium模块使用详解、打码平台使用、xpath使用、使用selenium爬取京东商品信息、scrapy框架介绍与安装

    今日内容概要 selenium的使用 打码平台使用 xpath使用 爬取京东商品信息 scrapy 介绍和安装 内容详细 1.selenium模块的使用 # 之前咱们学requests,可以发送htt ...

  9. Python逆向爬虫之scrapy框架,非常详细

    爬虫系列目录 目录 Python逆向爬虫之scrapy框架,非常详细 一.爬虫入门 1.1 定义需求 1.2 需求分析 1.2.1 下载某个页面上所有的图片 1.2.2 分页 1.2.3 进行下载图片 ...

随机推荐

  1. #WEB安全基础 : HTML/CSS | 0x11 浅谈GET和POST

    HTTP中的GET和POST请求方法 我上次提到了GET和POST,现在就让你来认识一下这些新朋友 请看图 POST和GET都是将用户输入到浏览器的数据发送给服务器,不过采用了两种不同的方式,POST ...

  2. SAP MM ME1M报表结果不科学?

    SAP MM ME1M报表结果不科学? 做过SAP MM顾问的都知道,报表ME1M可以查询物料的info record列表,即是说可以以列表的形式批量显示多个物料的采购价格主数据. 但是这个报表有个不 ...

  3. windows下QT打包

    1.找到对应的MinGW命令,打开 2.进入exe目录 3.执行windeployqt XX.exe

  4. Django 如何获取真实远程客户端IP

    问题简述 我们知道HttpRequest.META字典包含所有HTTP头部信息(可用的头部信息取决于客户端和服务器).一般情况下,HttpRequest.META.get('REMOTE_ADDR') ...

  5. PostgreSql 查询表结构和说明

    select (select relname from pg_class where oid=a.attrelid) relname , () as comment from pg_class whe ...

  6. java实现简单的solr查询

    SolrQuery类是实现solr查询的类. @Test public void testSelect() { String url = "http://localhost:8081/sol ...

  7. 英语口语练习系列-C12-不了解

    词汇 air [eə(r)] n. 空气 fresh air 新鲜的空气 warm air 暖暖的空气 I like to air the room. 我喜欢给房间通气. on the air 正在播 ...

  8. git冲突解决办法合集

    一 换行符CRLF错误解决办法 1 错误产生原因 不同的操作系统使用的换行符是不一样的. unix/linux使用的是LF,max后期也采用了LF,但在windows一直采用的CRLF(回车)换行符. ...

  9. Koa 框架介绍

    Node.js 是一个异步的世界,官方 API 支持的都是 callback 形式的异步编程模型,这 会带来许多问题,例如:callback 嵌套问题 ,异步函数中可能同步调用 callback 返回 ...

  10. Zabbix 3.4.7调整监控阈值以及告警级别

    1.找到需要监控的主机:右上角进行搜索 我们要更改sepm02p的阈值和级别: 进行更改级别:先点击Triggers , 选中要更改的监控项,例如我要更改CPU,点击以下红色标出的,千万不要选择Tem ...