Scrapy框架简介Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。

Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

Scrapy架构图(绿线是数据流向):

- Scrapy Engine(引擎):负者Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据转递等。 - Scheduler(调度器) :它负责接受引擊发送过来的Request请求,并按照一定的方式进行整理排列,入 队,当引擎需要时,交还给引擎。 - Downloader (下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的 Responses交还给Scrapy Engine(引擎) ,由引擎交给Spider来处理。 - Spider (爬虫) :它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要 跟进的URL提交给引擎,再次进入Scheduler(调度器)。 - Item Pipeline(管道) :它负责处理Spider 中获取到的Item ,并进行进行后期处理(详细分析、过滤、 存储等)的地方。 - Downloader Middlewares (下载中间件) : 你可以当作是一个可以自定义扩 展下载功能的组件。 - Spider Middlewares (Spider中间件) : 你可以理解为是一个可以自定扩展和操作引擎和Spider中 间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests )

制作 Scrapy 爬虫 一共需要4步:新建项目 (scrapy startproject xxx):新建一个新的爬虫项目

明确目标 (编写items.py):明确你想要抓取的目标

制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页

存储内容 (pipelines.py):设计管道存储爬取内容

入门案例

分析: 1. 创建一个Scrapy项目。 2. 定义提取的结构化数据(Item)。 3. 编写爬取网站的Spider并且提取出结构化数据(Item)。 4. 编写Item Pipelines 来存储提取到的Item(即结构化数据)。

一、新建scrapy项目工程(scrapy startproject)

在开始爬取之前,必须创建一个新的Scrapy项目,进入自定义的项目目录中。运行下列命令: 在pycharm界面中打开 View --> Tool Windows --> Terminal

==(1) 验证scrapy是否成功安装:== 在Terminal中输入 scrapy 看看是否显示scrapy信息 倘若出现:=='scrapy' 不是内部或外部命令,也不是可运行的程序或批处理文件。==

①、碰到这个问题,一般是pip重装或者升级过导致的,这里的解决方案是:先运行pip uninstall scrapy卸载scrapy。 ②、这里会提示是否继续,输入y然后回车即可。 ③、接下来重新安装scrapy,pip install scrapy。 ④、安装完成之后,输入scrapy运行测试

==(2)创建scrapy项目工程== 在Terminal中输入:

# scrapy startproject + 自定义的项目名称Scrapy startproject ITcast

成功创建项目的目录为:

文件说明: - scrapy.cfg 项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中) - items.py:设置数据存储模板,用于结构化数据,如:Django的Model - pipelines.py:数据处理行为,如:一般结构化的数据持久化 - settings.py:配置文件,如:递归的层数、并发数,延迟下载等 - spiders:爬虫目录,如:创建文件,编写爬虫规则

==(3)创建写爬虫的文件==

# scrapy genspider +名称 + '网站'#建立爬虫文件scrapy genspider itcast "itcast.cn"

结果为:

二、制作爬虫

1. 爬数据

打开 ITcast/spider目录里的 itcast.py,默认增加了下列代码:

# -*- coding: utf-8 -*-

import scrapy

class ItcastSpider(scrapy.Spider):

name = 'itcast'

allowed_domains = ['itcast.cn']

start_urls = ['http://itcast.cn/']

def parse(self, response):

pass

也可以自行创建itcast.py并编写上面的代码,只不过使用命令可以免去编写固定代码的麻烦要建立一个Spider, 你必须用scrapy.Spider类创建一个子类,并确定了三个强制的属性 和 一个方法。

name = "" :这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。

allow_domains = [] 是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。

start_urls = () :爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。

parse(self, response) :解析的方法,每个初始URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数,主要作用如下: 负责解析返回的网页数据(response.body),提取结构化数据(生成item) 生成需要下一页的URL请求。

将start_urls的值修改为需要爬取的第一个url

start_urls = ['http://www.itcast.cn/channel/teacher.shtml']

2. 取数据

爬取整个网页完毕,接下来的就是的取过程了,首先观察页面源码:

xpath 方法,我们只需要输入的 xpath 规则就可以定位到相应 html 标签节点。 Chrome 给我们提供了一键获取 xpath 地址的方法(右键->检查->copy->copy xpath),如下图:

/html/head/title: 选择HTML文档中

标签内的 元素

/html/head/title/text(): 选择上面提到的

元素的文字

//td: 选择所有的

元素

//div[@class="mine"]: 选择所有具有 class="mine" 属性的 div 元素

3、编写代码

需要编写四个相关联的文件:itcast.py、items.py、settings.py、pipelines.py (管道文件)。 (1) itcast.py

# -*- coding: utf-8 -*-

import scrapy

#导入容器

from ITcast.items import ItcastItem

class ItcastSpider(scrapy.Spider):

# 爬虫名 启动爬虫时需要的参数*必需

name = 'itcast'

# 爬取域范围 允许爬虫在这个域名下进行爬取(可选) 可以不写

allowed_domains = ['itcast.cn']

#起始url列表 爬虫的第一批请求,将求这个列表里获取

start_urls = ['http://www.itcast.cn/channel/teacher.shtml']

def parse(self, response):

node_list = response.xpath("//div[@class='li_txt']")

for node in node_list:

#创建item字段对象,用来存储信息

item = ItcastItem()

# .extract() 将xpath对象转换围殴Unicode字符串

name = node.xpath("./h3/text()").extract()

title = node.xpath("./h4/text()").extract()

info = node.xpath("./p/text()").extract()

item['name'] = name[0]

item['title'] = title[0]

item['info'] = info[0]

#返回提取到的每一个item数据 给管道文件处理,同时还会回来继续执行后面的代码

yield item

(2)items.py

# -*- coding: utf-8 -*-

# Define here the models for your scraped items

#

# See documentation in:

# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy

class ItcastItem(scrapy.Item):

# define the fields for your item here like:

# 与itcast.py 定义的一一对应

name = scrapy.Field()

title = scrapy.Field()

info = scrapy.Field()

#pass

(3)settings.py 找到以下字段,取消字段的注释。

ITEM_PIPELINES = {

'ITcast.pipelines.ItcastPipeline': 100, #值越小优先级越高

}

(4) pipelines.py (管道文件)

import json

class ItcastPipeline(object):

def __init__(self):

#python3保存文件 必须需要'wb' 保存为json格式

self.f = open("itcast_pipeline.json",'wb')

def process_item(self, item, spider):

#读取item中的数据 并换行处理

content = json.dumps(dict(item),ensure_ascii=False) + ',\n'

self.f.write(content.encode('utf=8'))

return item

def close_spider(self,spider):

#关闭文件

self.f.close()

4、结果展示 执行文命令行: scrapy crawl + 爬虫文件的名称。 在Terminal中输入 scrapy crawl itcast 执行scrapy项目,生成json文件:

4. 保存数据

scrapy保存信息的最简单的方法主要有四种,-o 输出指定格式的文件,命令如下:

scrapy crawl itcast -o teachers.json

csv 逗号表达式,可用Excel打开

scrapy crawl itcast -o teachers.csv

xml格式

scrapy crawl itcast -o teachers.xml

==对于了解更多实战案例 和 如何爬取"下一页面"的用法,可以参考文章==Scrapy糗事百科爬虫实战代码分析

最流行的python爬虫框架_Python最火爬虫框架Scrapy入门与实践相关推荐

  1. python数据分析案例2-1:Python练习-Python爬虫框架Scrapy入门与实践

    本文建立在学习完大壮老师视频Python最火爬虫框架Scrapy入门与实践,自己一步一步操作后做一个记录(建议跟我一样的新手都一步一步进行操作). 主要介绍: 1.scrapy框架简介.数据在框架内如 ...

  2. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  3. python 爬虫框架_Python实战:爬虫框架(6)

    数据挖掘 用于通过互联网到各个服务器获取数据 数据 公开数据:客户端浏览器访问网页所看到的数据 隐私数据:服务器内部没有暴露,具有隐私权限的数据 爬虫 网络爬虫:公开数据 蠕虫爬虫:携带具有攻击性病毒 ...

  4. python的orm框架_Python 常用的ORM框架简介

    ORM概念 ORM(Object Ralational Mapping,对象关系映射)用来把对象模型表示的对象映射到基于S Q L 的关系模型数据库结构中去.这样,我们在具体的操作实体对象的时候,就不 ...

  5. python十大框架_python 十大web框架排名总结

    0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的分析. 1 D ...

  6. python twisted教程_Python下的twisted框架入门指引

    什么是twisted? twisted是一个用python语言写的事件驱动的网络框架,他支持很多种协议,包括UDP,TCP,TLS和其他应用层协议,比如HTTP,SMTP,NNTM,IRC,XMPP/ ...

  7. 与python相关的爬虫工具_python小课堂|爬虫工程师必备的10个python爬虫工具!

    [摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行各业之中,并被大家所熟知,所以也有越来越多的python学习者关注py ...

  8. python组件介绍_python 中的爬虫· scrapy框架 重要的组件的介绍

    一 .  去重的规则组件 去重数据,中通过set() 去重的, 留下的数据存在redis 中, 找到这个类  : from scrapy.dupefilter import RFPDupeFilter ...

  9. python爬虫意思_python为什么叫爬虫

    python为什么叫爬虫 作为一门编程语言而言,Python是纯粹的自由软件,以简洁清晰的语法和强制使用空白符进行语句缩进的特点从而深受程序员的喜爱.举一个例子:完成一个任务的话,c语言一共要写100 ...

最新文章

  1. 大型技术网站的技术( 高并发、大数据、高可用、分布式....)(一)
  2. 链表中倒数第k个节点
  3. python取消任务的方法_python-即使忽略CancelledError,如何取消任务执...
  4. Visitor(访问者)--对象行为型模式
  5. python扩展,用python扩展列
  6. 润乾单元格加html点击事件_报表输入页码翻页(润乾 V2018)
  7. C#实现Base64编码与解码及编码名称和代码页(Encoding.GetEncoding)
  8. 二进制GCD算法解析
  9. 【论文解读】关于深度森林的一点理解
  10. Word写毕业论文时页眉和页脚的设置问题
  11. python学习一点 快乐一点(2)乱序整数序列两数之和绝对值最小
  12. 电饭锅鸿蒙系统,有了美的轻食电饭煲,人们更加确定了做饭工具的重要性
  13. PCIe学习笔记之pcie初始化枚举和资源分配流程代码分析
  14. 超详细如何配置将WAN接入
  15. 安卓视频播放,部分手机不能快进
  16. 【转】几个ARX取CAD窗口句柄的函数
  17. Win11自带的输入法不见了
  18. 鲁大师7月新机流畅榜:realme GT大师探索版拿下冠军!
  19. java httpclient重定向_处理HttpClient重定向
  20. 金刚铠甲心咒全文注音

热门文章

  1. 负载均衡设备oracle,Oracle RAC 服务器端联接负载均衡(Load Balance)
  2. Onvif学习总结(转载)
  3. 很多初接触乐鑫ESP32/ESP8266 模块时,都不清楚怎么为 ESP32、ESP8266 系列模组烧录固件呢?这里以启明云端WT8266-S5(ESP-12F)和ESP32-WROOM模块为例说明
  4. 空间句法软件_【特训营2:空间句法高阶班】GIS中的空间句法运用 丨城市数据派...
  5. python循环捕捉异常_python异常捕捉以及处理
  6. acf滞后数必须为正整数。_【知识点】“勾股定理”的必考点,必须掌握!
  7. 了不起的开发者 丨 有奖征文活动来啦!
  8. linux java远程调试_[转]JPDA:Java平台调试架构(常用的远程调试方法)
  9. 超过200m文件发送_微信支持发送大文件了,高清视频不再压缩
  10. Java的流读一行丢一行_java – 在少数特定情况下记录丢失的消息