爬取流程
Spider
类定义如何爬取指定的一个或多个网站,包括是否要跟进网页里的连接和如何提取网页内容中的数据。php
爬取的过程是相似如下步骤的循环:html
1.经过指定的初始URL初始化Request,并指定回调函数。当Request下载完后,生成Response做为参数传给回调函数。初始的Request是经过start_requests()读取start_urls中的URL来生成的,回调函数为parse()。 2.在回调函数中分析Response的内容,返回Item对象或者Request或包含两者的可迭代容器。返回Request对象通过Scrapy处理,下载相应的内容,并调用设置的回调函数。 3.在回调函数中,能够用选择器(或者Beautiful Soup,lxml这些解析器)来分析网页内容,生成Item。 4.生成的Item能够存入数据库,或存入到文件。
spider类
class scrapy.spiders.Spider:最简单的爬虫类。 方法与属性: name:爬虫名,要惟一。 allowed_domains:容许爬取的域名列表。 start_urls:初始的URL列表。 custom_settings:参数配置字典,必须是类属性,由于参数配置在实例化前被更新。 crawler:此属性是由from_crawler()设置的。 settings:运行此爬虫的设置。 logger:Python的日志记录器,经过爬虫名建立。 from_crawler(crawler, *args, **kwargs):类方法,用于建立爬虫。crawler是Crawler的实例对象。 start_requests():当打开爬虫时调用此方法。会用初始URL列表建立Request。只调用一次。 parse(response):用于处理Response。 log(message[, level, component]):经过封装logger来发送日志消息。 closed(reason):爬虫关闭时调用此方法。
爬虫参数
爬虫能够接受参数来改变它的行为。这些参数通常用来定义初始URL,或者限定爬取网站的部份内容,也能够用来配置其它任何功能。node
在运行crawl
命令时,经过-a
选项来传递参数(键值对):web
scrapy crawl myspider -a category=electronics
而后能够在__init__()
初始化函数里获取参数,如:正则表达式
class MySpider(scrapy.Spider): name = 'myspider' def __init__(self, category=None, *args, **kwargs): # 直接做为一个函数参数 super(MySpider, self).__init__(*args, **kwargs) self.start_urls = ['http://www.example.com/categories/%s' % category]
而默认的__init__()
函数会把这些参数定义为爬虫的属性,所以也能够这样用:chrome
class MySpider(scrapy.Spider): name = 'myspider' def start_requests(self): yield scrapy.Request('http://www.example.com/categories/%s' % self.category) # 做为一个属性