- scrapy框架
- scrapy整体框架结构
- Scrapy 流程
- scrapy.Spider
- 爬虫实例
scrapy框架
Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy是一个为遍历爬行网站、分解获取数据而设计的应用程序框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
scrapy整体框架结构
scrapy整体框架结构图,如下所示:
由上图所知,scrapy主要由以下5大组件构成
- Spiders(爬虫)
用户可在此处定制自己的爬虫,从网页中提取需要的信息,即所谓的实体(item),返回给pipeline进行持久化操作;用户也可提取出链接,提交给调度器,继续爬取。 - Schedule(调度器)
一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是 什么,同时去除重复的网址(不做无用功)。用户可以自己的需求定制调度器。 - Item pipeline(实体管道)
用于处理爬虫提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。例如将其写入数据库中这些操作可以放在此处进行 - Downloader(下载器)
下载器,主要用于下载请求的页面,并将爬取到的页面返回给spiders进行处理 - Scrapy Engine(Scrapy 引擎)
Scrapy引擎是整个框架的核心.它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。
Scrapy 流程
1.引擎从调度器中取出一个url 用于接下来得爬取
2.将上述取出的url封装为一个Request请求传给下载器
3.下载器下载的网页信息,并将相应的信息返回给爬虫
4.爬虫对网页进行相应的处理,将需要的数据封装为实体,返回给pipeline;如果是链接则将链接提交给调度器,等待爬取
5.pipeline对数据进行持久化
scrapy.Spider
1.自定义类
class JobboleSpider(scrapy.Spider):
name = jobbole #自定义名称
allowed_domains = ['blog.jobbole.com'] #服务器域名
start_urls = ['http://blog.jobbole.com/all-posts/'] #首次请求的url
继承Spider基类,在自定义类中需要注意几个函数:
- def start_requests(self):
该方法将读取start_urls内的地址,并为每一个地址生成一个Request对象,交给Scrapy下载器 - def parse(self):
默认的Request对象回调函数,处理返回的response。
大部分情况下都只重载这两个函数,然后通过这两个函数引申出一些其他操作,例如在parse 函数中:(记录404的url)
def __init__(self):
self.fail_urls = []
def parse(self):
if response.status == 404:
self.fail_urls.append(response.url)
爬虫实例
在安装python后,最好创建一个虚拟环境进行操作,这样你在这个环境内随意操作都不会对其他产生影响。具体如何创建虚拟环境可以自行百度进行查看。
在安装包时,可以 -i https://pypi.douban.com/simple/ 链接一些国内的镜像源加快下载速度