一文搞懂爬虫Scrapy框架详解
优采云 发布时间: 2022-05-21 05:55一文搞懂爬虫Scrapy框架详解
“Python爬虫Scrapy框架实践。”
大数据已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。”人们对于海量数据的挖掘和运用越来越密切,预示着爬虫工作者已经成为互联网数据公司的关键性职位,他们不但要精通数据抓取和分析,还要掌握搜索引擎和相关检索的算法,对内存、性能、分布式算法都要有一定的了解,并针对工作进程编排合理的布局。依据数据来预测某一种事物未来的发展趋势,以及对应的风险,提早解决未来即将遇到的风险,防范于未然。
一 Scrapy框架简介
Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
了解scrapy爬虫原理:Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构如下:
总结-scrapy大概流程如下:
Scrapy Engine:Scrapy引擎。负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。
Scheduler:调度器。从Scrapy Engine接受请求(requests)并排序列入队列,并在引擎再次请求时返回。用它来决定下一个抓取的网址是什么,同时去除重复的网址。
Downloader:下载器。抓取网页并将网页内容返还给Spiders。建立在twisted异步模型。
Spiders:爬虫。用户自定义的类,主要用来解析网页,提取Items,发送url跟进等新请求等。
Item Pipelines:管道。主要用来处理Spider解析出来的Items,进行按规则过滤,验证,持久化存储(如数据库存储)等
Downloader Middlewares:下载中间件。位于Scrapy Engine和Downloader之间,主要是处理Scrapy引擎与下载器之间的请求及响应。
Spider Middlewares:爬虫中间件。位于Scrapy Engine和Spiders之间,主要工作是处理Spiders的响应输入和请求输出。
Scheduler Middlewares:调度中间件。位于Scrapy Engine和Scheduler之间。主要工作是处理从Scrapy Engine发送到Scheduler的请求和响应。
二 Scrapy框架详解Scrapy由Python语言编写,是一个快速、高层次的屏幕抓取和Web抓取框架。1. 数据流向Scrapy数据流是由执行流程的核心引擎来控制的,流程如图所示。
框架组件数据流
1.ScrapyEngine打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个(批)要爬取的url(s);
2.ScrapyEngine向调度器请求第一个要爬取的url,并加入到Schedule作为请求以备调度;
3.ScrapyEngine向调度器请求下一个要爬取的url;
4.Schedule返回下一个要爬取的url给ScrapyEngine,ScrapyEngine通过DownloaderMiddlewares将url转发给Downloader;
5.页面下载完毕,Downloader生成一个页面的Response,通过DownloaderMiddlewares发送给ScrapyEngine;
6.ScrapyEngine从Downloader中接收到Response,通过SpiderMiddlewares发送给Spider处理;
7.Spider处理Response并返回提取到的Item以及新的Request给ScrapyEngine;
8.ScrapyEngine将Spider返回的Item交给ItemPipeline,将Spider返回的Request交给Schedule进行从第二步开始的重复操作,直到调度器中没有待处理的Request,ScrapyEngine关闭。
2Scrapy 的运作流程
制作 Scrapy 爬虫 一共需要 4 步:
1 新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
2 明确目标 (编写 items.py):明确你想要抓取的目标,想要爬什么信息
3 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
4 存储内容 (pipelines.py):设计管道存储爬取内容
具体流程
1、scrapy安装
pip install scrapy<br /><br />Successfully installed Automat-20.2.0 PyDispatcher-2.0.5 Twisted-21.2.0 attrs-21.2.0 constantly-15.1.0 cssselect-1.1.0 h2-3.2.0 hpack-3.0.0 hyperframe-5.2.0 hyperlink-21.0.0 incremental-21.3.0 itemadapter-0.2.0 itemloaders-1.0.4 parsel-1.6.0 priority-1.3.0 protego-0.1.16 pyOpenSSL-20.0.1 pyasn1-0.4.8 pyasn1-modules-0.2.8 queuelib-1.6.1 scrapy-2.5.0 service-identity-21.1.0 twisted-iocpsupport-1.0.1 w3lib-1.22.0 zope.interface-5.4.0
检查是否安装成功:
scrapy versionScrapy 2.5.0
scrapy常用命令使用:
Usage: scrapy [options] [args]<br />Available commands: bench Run quick benchmark test check Check spider contracts commands crawl Run a spider edit Edit spider fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates list List available spiders parse Parse URL (using its spider) and print the results runspider Run a self-contained spider (without creating a project) settings Get settings values shell Interactive scraping console startproject Create new project version Print Scrapy version view Open URL in browser, as seen by Scrapy<br />Use "scrapy -h" to see more info about a command
2、创建项目
//创建一个测试项目scrapy startproject scrapyproject<br />New Scrapy project 'scrapyproject', using template directory 'c:\users\username\appdata\local\programs\python\python36\lib\site-packages\scrapy\templates\project', created in: C:\Users\username\PycharmProjects\scrapyproject<br />You can start your first spider with: cd scrapyproject scrapy genspider example example.com
3、第一个爬虫项目
注释:
scrapy genspider -l 查看当前可以使用的爬虫模板
scrapy genspider -t 创建爬虫文件
1.scrapy startproject scrapyproject2.在工程目录下创建爬虫baidu 格式:scrapy genspider [-t template] <br />支持模板template:basic(默认)、crawl、csvfeed、xmlfeed这里name是爬虫的名字;domain是设置allowed_domains以及start_urls,这两个属性可以在爬虫类中修改<br /><br />cd scrapyprojectscrapy genspider baidu baidu.com (baidu 为爬虫的名称,baidu.com为要爬取的网站的域名)<br />输出:Created spider 'baidu' using template 'basic' in module: scrapyproject.spiders.baidu<br />3.使用pycharm 打开第一步创建的项目
目录及文件结构:
文件说明:
scrapy.cfg 项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中)
items.py 设置数据存储模板,用于结构化数据,如:Django的Model
pipelines 数据处理行为,如:一般结构化的数据持久化
settings.py 配置文件,如:递归的层数、并发数,延迟下载等
spiders 爬虫目录,如:创建文件,编写爬虫规则
注意:一般创建爬虫文件时,以网站域名命名。
4. cd 项目目录,重写parse函数,然后启动爬虫,命令:
注意ROBOTSTXT_OBEY = False baidu的robots.txt里面禁止了scrapy
scrapy crawl baidu
生成爬取结果
打开是界面:
05Scrapy校花网爬取实践
以校花网为例进行爬取,校花网:
创建xiaohuar spider:
scrapy genspider xiaohuar xiaohuar.comCreated spider 'xiaohuar' using template 'basic' in module: scrapyproject.spiders.xiaohuar
准备: