Scrapy一个开源和协做的框架,其最初是为了页面抓取 (更确切来讲, 网络抓取 )所设计的,使用它能够以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分普遍,可用于如数据挖掘、监测和自动化测试等领域,也能够应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。html
所谓的框架就是一个已经被集成了各类功能(高性能异步下载,队列,分布式,解析,持久化等)的具备很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法便可。python
Linux: pip3 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
出现上面的证实安装完成了ajax
#1 查看帮助 scrapy -h scrapy <command> -h #2 有两种命令:其中Project-only必须切到项目文件夹下才能执行,而Global的命令则不须要 Global commands: startproject #建立项目 genspider #建立爬虫程序 settings #若是是在项目目录下,则获得的是该项目的配置 runspider #运行一个独立的python文件,没必要建立项目 shell #scrapy shell url地址 在交互式调试,如选择器规则正确与否 fetch #独立于程单纯地爬取一个页面,能够拿到请求头 view #下载完毕后直接弹出浏览器,以此能够分辨出哪些数据是ajax请求 version #scrapy version 查看scrapy的版本,scrapy version -v查看scrapy依赖库的版本 Project-only commands: crawl #运行爬虫,必须建立项目才行,确保配置文件中ROBOTSTXT_OBEY = False check #检测项目中有无语法错误 list #列出项目中所包含的爬虫名 edit #编辑器,通常不用 parse #scrapy parse url地址 --callback 回调函数 #以此能够验证咱们的回调函数是否正确 bench #scrapy bentch压力测试 #3 官网连接 https://docs.scrapy.org/en/latest/topics/commands.html
#一、执行全局命令:请确保不在某个项目的目录下,排除受该项目配置的影响 scrapy startproject MyProject #建立项目
------------------------------------------------- cd MyProject scrapy genspider baidu www.baidu.com #建立爬虫文件baidu
scrapy genspider 应用名称 爬取网页的起始url
-------------------------------------------------------- scrapy settings --get XXX #若是切换到项目目录下,看到的则是该项目的配置 scrapy runspider baidu.py scrapy shell https://www.baidu.com response response.status response.body view(response) scrapy view https://www.taobao.com #若是页面显示内容不全,不全的内容则是ajax请求实现的,以此快速定位问题 scrapy fetch --nolog --headers https://www.taobao.com scrapy version #scrapy的版本 scrapy version -v #依赖库的版本 #二、执行项目命令:切到项目目录下 scrapy crawl baidu #执行baidu爬虫文件
scrapy crawl 应用名称 --nolog #执行爬虫程序,不显示日志
scrapy check scrapy list scrapy parse http://quotes.toscrape.com/ --callback parse scrapy bench
project_name/ scrapy.cfg: project_name/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py scrapy.cfg 项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中) items.py 设置数据存储模板,用于结构化数据,如:Django的Model pipelines 数据持久化处理 settings.py 配置文件,如:递归的层数、并发数,延迟下载等,强调:配置文件的选项必须大写不然视为无效,正确写法USER_AGENT='xxxx' spiders 爬虫目录,如:建立文件,编写爬虫解析规则
注意:通常建立爬虫文件时,以网站域名命名shell
scrapy startproject 项目名称浏览器
cd project_name(进入项目目录)bash
scrapy genspider 应用名称 爬取网页的起始url (例如:scrapy genspider qiubai www.qiushibaike.com)网络
在步骤2执行完毕后,会在项目的spiders中生成一个应用名的py爬虫文件,文件源码以下:并发
import scrapy class QiubaiSpider(scrapy.Spider): name = 'qiubai' #应用名称 #容许爬取的域名(若是遇到非该域名的url则爬取不到数据) allowed_domains = ['https://www.qiushibaike.com/'] #起始爬取的url start_urls = ['https://www.qiushibaike.com/'] #访问起始URL并获取结果后的回调函数(解析数据),该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll def parse(self, response): print(response.text) #获取字符串类型的响应内容 print(response.body)#获取字节类型的相应内容