关键词:
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下
Scrapy主要包括了以下组件:
- 引擎(Scrapy)
用来处理整个系统的数据流处理, 触发事务(框架核心) - 调度器(Scheduler)
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 - 下载器(Downloader)
用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的) - 爬虫(Spiders)
爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面 - 项目管道(Pipeline)
负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。 - 下载器中间件(Downloader Middlewares)
位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。 - 爬虫中间件(Spider Middlewares)
介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。 - 调度中间件(Scheduler Middewares)
介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。
Scrapy运行流程大概如下:
- 引擎从调度器中取出一个链接(URL)用于接下来的抓取
- 引擎把URL封装成一个请求(Request)传给下载器
- 下载器把资源下载下来,并封装成应答包(Response)
- 爬虫解析Response
- 解析出实体(Item),则交给实体管道进行进一步的处理
- 解析出的是链接(URL),则把URL交给调度器等待抓取
Scrapy的安装:
Linux系统:
pip install scrapy
Windows系统:
a. pip3 install wheel b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted c. 进入下载目录,执行 pip3 install Twisted?17.1.0?cp35?cp35m?win_amd64.whl d. pip3 install pywin32 e. pip3 install scrapy
Scrapy基本使用
1.基本命令
# 创建项目 scrapy startproject corn # 进入项目 cd corn # 创建爬虫程序 scrapy genspider 应用名称 爬取网页的起始url (例如:scrapy genspider corn www.xxx.com) # 运行爬虫 scrapy crawl 爬虫名称(corn) --nolog
2.项目结构
3.编写代码
# -*- coding: utf-8 -*- import scrapy class XiaohuarSpider(scrapy.Spider): name = ‘xiaohuar‘ #爬虫程序名 # 允许爬取的域名(如果遇到非该域名的url则爬取不到数据) allowed_domains = [‘www.xxx.com‘] # 起始爬取的url start_urls = [‘http://www.xiaohuar.com/‘] # 访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll def parse(self, response): print(response.text) #获取字符串类型的响应内容 print(response.body)#获取字节类型的相应内容
4.修改配置(setting.py)
修改内容及其结果如下: 19行: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‘ #伪装请求载体身份 22行:ROBOTSTXT_OBEY = False #可以忽略或者不遵守robots协议
5.执行爬虫程序
scrapy crawl xiaohuar(爬虫程序名字)
执行程序后就拿到了整个页面的数据
小试牛刀:
将糗事百科首页中段子的内容和标题进行爬取
# -*- coding: utf-8 -*- import scrapy class QiubaiSpider(scrapy.Spider): name = ‘qiubai‘ allowed_domains = [‘https://www.qiushibaike.com/‘] start_urls = [‘https://www.qiushibaike.com/‘] def parse(self, response): #xpath为response中的方法,可以将xpath表达式直接作用于该函数中 odiv = response.xpath(‘//div[@id="content-left"]/div‘) content_list = [] #用于存储解析到的数据 for div in odiv: #xpath函数返回的为列表,列表中存放的数据为Selector类型的数据。我们解析到的内容被封装在了Selector对象中,需要调用extract()函数将解析的内容从Selecor中取出。 author = div.xpath(‘.//div[@class="author clearfix"]/a/h2/text()‘)[0].extract() content=div.xpath(‘.//div[@class="content"]/span/text()‘)[0].extract() #将解析到的内容封装到字典中 dic= ‘作者‘:author, ‘内容‘:content #将数据存储到content_list这个列表中 content_list.append(dic) return content_list
执行程序:
scrapy crawl 爬虫名称 :该种执行形式会显示执行的日志信息
scrapy crawl 爬虫名称 --nolog:该种执行形式不会显示执行的日志信息
爬虫之scrapy框架(代码片段)
1.scrapy框架介绍 Scrapy是用纯Python实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架 Scrapy特色是使用了Twisted异步网络框架来处理网络通讯,加快了下载速度,不用自己去实现异步框架,并且包含了各种中间... 查看详情
爬虫之scrapy框架(代码片段)
...I所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。Scrapy是基于twisted 查看详情
python网络爬虫之scrapy框架(crawlspider)(代码片段)
目录Python网络爬虫之Scrapy框架(CrawlSpider)CrawlSpider使用爬取糗事百科糗图板块的所有页码数据Python网络爬虫之Scrapy框架(CrawlSpider)提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法?方法一... 查看详情
python爬虫之scrapy框架环境安装(代码片段)
文章目录前言一.scrapy框架环境安装二.创建一个scrapy工程前言为什么要学习scrapy框架?框架是一个集成了很多功能,并且具有很强通用性的一个项目模板。scrapy框架就具有许多强大的功能,例如高性能的持久化存储操... 查看详情
python爬虫之scrapy框架系列(10)——scrapy选择器selector(代码片段)
目录:1.Scrapy选择器1.1构造selector选择器1.2使用selector选择器1.Scrapy选择器Scrapy提供基于lxml库的解析机制,它们被称为选择器。因为,它们“选择”由XPath,re正则和CSS表达式指定的HTML文档的某部分。Scarpy选择器的API非常小,且非... 查看详情
爬虫之scrapy框架(代码片段)
...任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。Scrap,是碎片的意思,这个Python的爬虫框架叫Scrapy。Scrapy是基于twisted框架开发而来,twisted是一... 查看详情
scrapy框架之分布式操作(代码片段)
一、分布式爬虫介绍 分布式爬虫概念:多台机器上执行同一个爬虫程序,实现网站数据的分布爬取。1、原生的Scrapy无法实现分布式爬虫的原因?调度器无法在多台机器间共享:因为多台机器上部署的scrapy会各自拥有各自的... 查看详情
爬虫之scrapy框架(代码片段)
...I所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy使用了Twisted异步网络库来处理网络通讯。整体架构大致如下 Scrapy主要包括了以下组件:引擎(Scrapy)... 查看详情
python爬虫之scrapy框架系列——settings.py配置文件的学习(代码片段)
拓展:来仔细研读研读settings.py配置文件!#-*-coding:utf-8-*-#Scrapysettingsfordoubanproject##Forsimplicity,thisfilecontainsonlysettingsconsideredimportantor#commonlyused.Youcanfindmoresettingsconsultingthedocumentat 查看详情
python爬虫之scrapy框架系列——settings.py配置文件的学习(代码片段)
拓展:来仔细研读研读settings.py配置文件!#-*-coding:utf-8-*-#Scrapysettingsfordoubanproject##Forsimplicity,thisfilecontainsonlysettingsconsideredimportantor#commonlyused.Youcanfindmoresettingsconsultingthedocumentat 查看详情
python爬虫之scrapy框架,基本介绍使用以及用框架下载图片案例(代码片段)
一、Scrapy框架简介Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓取。Scrapy使用了Twisted异步网络框架来... 查看详情
python爬虫之scrapy框架系列(16)——深入剖析request和response类(代码片段)
目录:Request和Response类:1.深入剖析Request类:利用request.meta传递参数拓展一:FormRequest类2.深入剖析Response类:Request和Response类:1.深入剖析Request类:importscrapyfromscrapy.httpimportRequest#Scrapy.http.Request类是scrapy框架中request的基类。#####... 查看详情
python爬虫之scrapy框架系列(16)——深入剖析request和response类(代码片段)
目录:Request和Response类:1.深入剖析Request类:利用request.meta传递参数拓展一:FormRequest类2.深入剖析Response类:Request和Response类:1.深入剖析Request类:importscrapyfromscrapy.httpimportRequest#Scrapy.http.Request类是scrapy框架中request的基类。#####... 查看详情
爬虫系列之scrapy框架(代码片段)
...I所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。Scrapy是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下:'... 查看详情
爬虫-scrapy框架简介与入门(代码片段)
...量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。Scrapy使用了Twisted[‘tw?st?d](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己... 查看详情
5爬虫之scrapy框架(代码片段)
...I所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。Scrapy是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下:Comp... 查看详情
python爬虫之scrapy框架系列(10)——scrapy选择器selector(代码片段)
目录:1.Scrapy选择器1.1构造selector选择器1.2使用selector选择器1.Scrapy选择器Scrapy提供基于lxml库的解析机制,它们被称为选择器。因为,它们“选择”由XPath,re正则和CSS表达式指定的HTML文档的某部分。Scarpy选择器的API非常小,且非... 查看详情
爬虫学习12.scrapy框架之递归解析和post请求(代码片段)
爬虫学习12.scrapy框架之递归解析和post请求今日概要递归爬取解析多页页面数据scrapy核心组件工作流程scrapy的post请求发送今日详情1.递归爬取解析多页页面数据-需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久化... 查看详情