赞
踩
Scrapy是由Python语言开发的一个快速、高层次的屏幕抓取和web信息抓取框架,用于抓取web站点并从页面中提取结构化的数据。
Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试, Scrapy还使用了Twisted异步网络库来处理网络通讯。
Scrapy最便捷的地方在于,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
通过scrapy框架可以实现分布式爬取。
提供了内置的HTTP缓存,以加速本地开发。
提供了自动节演调节机制,而且具有遵守robots.txt的设置的能力。
可以定义爬行深度的限制,以避免爬虫进入死循环链接。
会自动保留会话。
执行自动HTTP基本认证。不需要明确保存状态。
可以传递登录表单。
Scrapy 有一个内置的中间件,可以自动设置请求中的引用(referrer)头。
支持通过3xx响应重定向,也可以通过HTML元刷新。
避免被网站使用的<noscript>meta重定向困住,以检测没有JS支持的页面。
默认使用CSS选择器或XPath编写解析器。
可以通过Splash或任何其他技术(如Selenium)呈现JavaScript页面。
拥有强大的社区支持和丰富的插件和扩展来扩展其功能。
提供了通用的蜘蛛来抓取常见的格式:站点地图、CSV和XML。
内置支持以多种格式(JSON、CSV、XML、JSON-lines)导出收集的数据并将其存在多个后端(FTP、S3、本地文件系统)中
Scrapy Engine(引擎):
负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
Scheduler(调度器):
它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
Downloader(下载器):
负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy
Engine(引擎),由引擎交给Spider来处理,
Spider(爬虫):
它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),
Pipeline(管道)**:
它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
Downloader Middlewares(下载中间件)**:
你可以当作是一个可以自定义扩展下载功能的组件。
Spider Middlewares(Spider中间件)**:
你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)
引擎打开一个网站(open adomain),找到处理该网站的Spider并向该spider请求第一个要爬取的URL(s)。
引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。
引擎向调度器请求下一个要爬取的URL。
调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)。
一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。
引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理。
Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。
引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器。
(从第二步)重复直到调度器中没有更多地request,引擎关闭该网站
安装命令: pip3 install scrapy
如果安装失败按照下面的步骤进行安装:
pip3 install wheel.
pip3 install scrapy.
如果安装过程中提示缺失 twisted
下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/
创建命令: scrapy startproject xxx #创建项目
执行这条命令将创建一个新目录:包括的文件如下:
zhaobiaoscrapy.cfg:项目配置文件
quotes/:项目python模块,代码将从这里导入
quotes/items:项目items文件
quotes/pipelines.py:项目管道文件
quotes/settings.py:项目配置文件
quotes/spiders:放置spider的目录
import scrapy from quotes.items import QuotesItemclass QuotespiderSpider(scrapy.Spider): name = 'quotespider' # 爬虫名称 allowed_domains = ['quotes.toscrape.com'] # 允许爬虫访问的域名,可以多个 start_urls = ['http://quotes.toscrape.com/'] # 爬虫开始的url地址 def parse(self, response): # 爬虫返回的数据解析函数 quotes = response.css('.quote') # 通过css选择器选择相应的内容 for quote in quotes: item = QuotesItem() # item做数据持久化的 text = quote.css('.text::text').extract_first() # ::text 表示输出文本内容 author = quote.css('.author::text').extract_first() # ::text 表示输出文本内容 tags = quote.css('.tags .tag::text').extract() # extract_first() 表示找第一个,extract()表示找到所有,并返回一个列表 item['text'] = text # 赋值 首先要在items类中创建 item['tags'] = tags item['author'] = author yield item # 生成item 做数据存储 next = response.css('.pager .next a::attr(href)').extract_first() # 得到相对的url url = response.urljoin(next) # 获取一个绝对的url,获取下一页的url yield scrapy.Request(url=url, callback=self.parse) # 处理链接,将返回的response交给callback的回调函数 # scrapy shell quotes.toscrape.com # 进入命令行调试 # scrapy crawl quotes -o quotes.json(.csv .xml) # 数据保存,可以保存多个类型
Items是将要装载抓取的数据的容器,它工作方式像python里面的字典,但它提供更多的保护,比如对未定义的字段填充以防止拼写错误。
它通过创建一个scrapy.item.Item类来声明,定义它的属性为scrpy.item.Field对象,就像是一个对象关系映射(ORM).
我们通过将需要的item模型化,来控制获得的站点数据,比如我们要获得站点的名字,url和网站描述,我们定义这三种属性的域。要做到这点,我们编辑在quotes目录下的items.py文件,我们的Item类将会是这样
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。