干货!一份详实的 Scrapy 爬虫教程,值得收藏!
大家好,我是菜鸟哥!
之前分享了很多 requests
、selenium
的 Python 爬虫文章,本文将从原理到实战带领大家入门另一个强大的框架 Scrapy
。如果对Scrapy
感兴趣的话,不妨跟随本文动手做一遍!
一、Scrapy框架简介
Scrapy
是:由Python
语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓取。
二、运行原理
Scrapy框架的运行原理看下面一张图就够了(事实上原理是比较复杂的,也不是三言两语能够说清楚的,因此感兴趣的读者可以进一步的相关文章来了解,本文不做过多讲解)
Scrapy主要包括了以下组件:
引擎(Scrapy Engine)
Item 项目
调度器(Scheduler)
下载器(Downloader)
爬虫(Spiders)
项目管道(Pipeline)
下载器中间件(Downloader Middlewares)
爬虫中间件(Spider Middlewares)
调度中间件(Scheduler Middewares)
三. 入门
3.1安装
第一种:在命令行模式下使用pip命令即可安装:
$ pip install scrapy
第二种:首先下载,然后再安装:
$ pip download scrapy -d ./
# 通过指定国内镜像源下载
$pip download -i https://pypi.tuna.tsinghua.edu.cn/simple scrapy -d ./
进入下载目录后执行下面命令安装:
$ pip install Scrapy-1.5.0-py2.py3-none-any.whl
3.2使用
使用大概分为下面四步 1 创建一个scrapy项目
scrapy startproject mySpider
2 生成一个爬虫
scrapy genspider demo "demo.cn"
3 提取数据
完善spider 使用xpath等
4 保存数据
pipeline中保存数据
3.3 程序运行
在命令中运行爬虫
scrapy crawl qb # qb爬虫的名字
在pycharm中运行爬虫
from scrapy import cmdline
cmdline.execute("scrapy crawl qb".split())
四、基本步骤
Scrapy
爬虫框架的具体使用步骤如下:
“
选择目标网站
定义要抓取的数据(通过Scrapy Items来完成的)
编写提取数据的spider
执行spider,获取数据
数据存储
”
五. 目录文件说明
当我们创建了一个scrapy项目后,继续创建了一个spider,目录结构是这样的:
下面来简单介绍一下各个主要文件的作用:
“
scrapy.cfg :项目的配置文件
mySpider/ :项目的Python模块,将会从这里引用代码
mySpider/items.py :项目的目标文件
mySpider/pipelines.py :项目的管道文件
mySpider/settings.py :项目的设置文件
mySpider/spiders/ :存储爬虫代码目录
”
5.1 scrapy.cfg文件
项目配置文件。这个是文件的内容:
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html[settings]
default = mySpider.settings[deploy]
#url = http://localhost:6800/
project = mySpider
5.2 mySpider**/**
项目的Python模块,将会从这里引用代码
5.3 mySpider/items.py
项目的目标文件
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass MyspiderItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()pass
定义scrapy items的模块,示例: name = scrapy.Field()
5.4 mySpider/pipelines.py
项目的管道文件
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapterclass MyspiderPipeline:def process_item(self, item, spider):return item
这个文件也就是我们说的管道,当Item在Spider中被收集之后,它将会被传递到Item Pipeline(管道),这些Item Pipeline组件按定义的顺序处理Item。每个Item Pipeline都是实现了简单方法的Python类,比如决定此Item是丢弃而存储。以下是item pipeline的一些典型应用:
验证爬取的数据(检查item包含某些字段,比如说name字段)
查重(并丢弃)
将爬取结果保存到文件或者数据库中
5.5 mySpider/settings.py
项目的设置文件
# Scrapy settings for mySpider project
...BOT_NAME = 'mySpider' # scrapy项目名SPIDER_MODULES = ['mySpider.spiders']
NEWSPIDER_MODULE = 'mySpider.spiders'
.......# Obey robots.txt rules
ROBOTSTXT_OBEY = False # 是否遵守协议,一般给位false,但是创建完项目是是True,我们把它改为False# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32 # 最大并发量 默认16
......
#DOWNLOAD_DELAY = 3 # 下载延迟 3秒# Override the default request headers: # 请求报头,我们打开
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',
}
# 爬虫中间件
#SPIDER_MIDDLEWARES = {
# 'mySpider.middlewares.MyspiderSpiderMiddleware': 543,
#}# 下载中间件
#DOWNLOADER_MIDDLEWARES = {
# 'mySpider.middlewares.MyspiderDownloaderMiddleware': 543,
#}
......
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {
# 'mySpider.pipelines.MyspiderPipeline': 300, # 管道
#}
.......
省略号省略代码,一般重要点,给了注释
6.mySpider/spiders/ :存储爬虫代码目录
import scrapyclass DbSpider(scrapy.Spider):name = 'db'allowed_domains = ['douban.com'] # 可以修改start_urls = ['http://douban.com/'] # 开始的url也可以修改def parse(self, response):# pass
六. Scrapy shell
Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据,但是一般使用的不多。感兴趣的查看官方文档:
官方文档
http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/shell.html
Scrapy Shell根据下载的页面会自动创建一些方便使用的对象,例如 Response 对象,以及 Selector 对象 (对HTML及XML内容)
。
当shell载入后,将得到一个包含response数据的本地 response 变量,输入
response.body
将输出response的包体,输出response.headers
可以看到response的包头。输入
response.selector
时, 将获取到一个response 初始化的类 Selector 的对象,此时可以通过使用response.selector.xpath()
或response.selector.css()
来对 response 进行查询。Scrapy也提供了一些快捷方式, 例如
response.xpath()
或response.css()
同样可以生效(如之前的案例)。
Selectors选择器
“
Scrapy Selectors 内置 XPath 和 CSS Selector 表达式机制
”
Selector有四个基本的方法,最常用的还是xpath:
xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表
extract(): 序列化该节点为字符串并返回list
css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表,语法同 BeautifulSoup4
re(): 根据传入的正则表达式对数据进行提取,返回字符串list列表
七、案例实战
本节,我将使用Scrapy爬取站酷数据作为示例
7.1 案例说明
既然已经初步了解了scrapy的工作流程以及原理,我们来做一个入门的小案例,爬取站酷首页推荐的item信息。如下图所示,一个小方框就是一个item信息。我们要提取每一个item的六个组成部分:
imgLink(封面图片链接);
title(标题);
types(类型);
vistor(人气);
comment(评论数);
likes(推荐人数)
然后只是一个页面的item,我们还要通过翻页实现批量数据采集。
7.2 文件配置
目录结构
在上一篇中我们说明了新建scrapy项目(zcool)和spider项目(zc),这里不再赘述,然后得到我们的目录结构如下图所示:
start.py文件
然后为了方便运行,在zcool目录下新建start文件。并进行初始化设置。
from scrapy import cmdline
cmdline.execute('scrapy crawl zc'.split())
settings.py文件
在这个文件里我们需要做几样设置
干货!一份详实的 Scrapy 爬虫教程,值得收藏!相关推荐
- scrapy爬虫储存到mysql_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
获取要爬取的URL 爬虫前期工作 用Pycharm打开项目开始写爬虫文件 字段文件items # Define here the models for your scraped items # # S ...
- Python之 - 使用Scrapy建立一个网站抓取器,网站爬取Scrapy爬虫教程
Scrapy是一个用于爬行网站以及在数据挖掘.信息处理和历史档案等大量应用范围内抽取结构化数据的应用程序框架,广泛用于工业. 在本文中我们将建立一个从Hacker News爬取数据的爬虫,并将数据按我 ...
- 清华大学计算机全套教程,清华大学计算机全套教程(值得收藏).doc
清华大学计算机全套教程(值得收藏) 要观看视频,请点击下列网址后,"进入课程"后,再点"视频讲解" 本科课程 微型计算机技术 /courses/jsj/GD_j ...
- Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Scrapy爬虫,请先准备好Scrapy的环境 获取要爬取的URL 爬虫前期工作 用Pycharm打开项目开始写爬虫文件 启动爬虫 获取要爬取的URL 爬虫前期工作 用Pycharm打开项目开始写爬虫 ...
- Scrapy 爬虫教程导航
From:https://brucedone.com/archives/771 8个最高效的 Python 爬虫框架 1. Scrapy.Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用 ...
- Scrapy爬虫教程二 浅析最烦人的反爬虫手段
最近一直在弄爬虫,也爬取了知名网站的一些数据(这里只是个人学习使用,不是商用!!!),大家都知道,爬虫和反爬虫一直以来都是相爱相杀的,爬虫程序员希望破解反爬虫手段,反爬虫程序员希望建立更加有效的反爬虫 ...
- 3dmax的学习资源、资源文件和教程,值得收藏!
您在Autodesk三维设计领域的职业生涯 有关使用3ds Max和Maya在计算机图形领域开始职业生涯的提示(包括新的3ds Max和Maya介绍教程,以复习您的技能) 确保3ds Max场景的完整 ...
- 干货丨浅析分布式系统(经典长文,值得收藏)
导读 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ.微信.淘宝.那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是 ...
- 一周学会小程序开发-20篇自学教程值得收藏
#第 002 期# 小程序是一种新的开放能力,开发者可以快速地开发一个小程序.小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 现在越来越多的大厂开始转向小程序了,什么你还不知道怎么开 ...
- Scrapy八小时快速入门第一小时:安装,创建与执行我们的Scrapy爬虫
安装 安装Scrapy非常简单,只需要在终端输入pip install scrapy,然后执行命令即可,如果不行,那么一般是底层库的问题,可以使用codna install --upgrade scr ...
最新文章
- Boost:是否支持sse4.1指令的测试程序
- pytorch 之 冻结某层参数,即训练时不更新
- AjaxToolKit学习笔记 之 ModalPopupExtender
- UESTC学位论文latex模板下载
- 指针 | golang之指针的学习
- linux下配置SVN搭建 centos svn安装配置
- android 显示文章内容,在Android中,RecyclerView在重新创建后没有显示任何内容
- 如何把Access中数据导入Mysql中 (转)
- STM32读取伺服电机编码器信号
- 夜深人静了,我们来学学分布式锁
- UDS诊断系列之七 安全访问(27)服务
- python快乐数,快乐数
- 【数据库原理】关系-Relationship
- 详解 Python 中的 filter() 函数
- Delphi中使用TThread类实现多线程
- 关于熔断器Hystrix替代方案的调研报告
- 来免费领养blog绿豆蛙宠物吧,和QQ宠物差不多
- Unity 鼠标悬停
- 遗留物检测算法及实现
- 超星高级语言程序设计实验作业 实验05 指针及其在程序设计中的应用
热门文章
- c语言绪论课题背景及意义,选题背景及课题研究的目的和意义范例.doc
- [开源] PLC梯形图转指令表的算法源代码
- noi linux,NOI Linux使用教程(基础讲解)
- 实木地板被机器人弄成坑_“实木地板”真的好?这些不搞明白,小心被商家坑了...
- 用python来开发webgame服务端(1)
- 微信小程序选择开始时间和结束时间控件
- 腾讯云CDN加速COS图床
- 互联网后端的主流编程语言是啥?不是Python?
- ruoyi 项目启动步骤
- ai人工智能开发_面向开发人员的十大人工智能(AI)工具