爬取流程
Spider
类定义如何爬取指定的一个或多个网站,包括是否要跟进网页里的链接和如何提取网页内容中的数据。
爬取的过程是类似以下步骤的循环:
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,或者限定爬取网站的部分内容,也可以用来配置其它任何功能。
在运行crawl
命令时,通过-a
选项来传递参数(键值对):
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__()
函数会把这些参数定义为爬虫的属性,因此也可以这样用:
class MySpider(scrapy.Spider): name = ‘myspider‘ def start_requests(self): yield scrapy.Request(‘http://www.example.com/categories/%s‘ % self.category) # 作为一个属性