CrawlSpider
:
概念:其实是Spider
的一个子类。Spider
是爬虫文件中爬虫类的父类.
- 子类的功能一定是多余父类.
作用:被用作于专业实现全站数据爬取
- 将一个页面下所有页面对应的数据进行爬取
基本使用:
- 创建一个工程
- cd 工程
- 创建一个基于
CrawlSpider
的爬虫文件scrapy genspider -t crawl SpiderName www.xxx.com
示例:
创建一个工程:crawlPro
scrapy startproject crawlPro
cd crawlPro
scrapy genspider -t crawl first www.xxx.com
- 修改配置文件(跟之前正常操作一样)
创建出来的应该是这样:
任务:爬取校花网源码里的所有链接
http://www.521609.com/daxuexiaohua/
我们先来介绍下下面这段代码:
rules = (
Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
)
rules
:定义抽取链接的规则。
LinkExtractor
:链接提取器。
callback
:回调函数。也就是解析数据的函数。
follow
:
True
:爬取所有页。False
:只爬取当前页面。
实例化LinkExtractor
对象.
链接提取器:根据规则(allow
参数) ,在页面中进行(url)爬取.
allow
=‘正则’:提取链接的规则.
根据链接的规律,我们来写下正则:
# 实例化LinkExtractor对象
# 链接提取器:根据规则(allow参数) ,在页面中进行(url)爬取
# allow='正则':提取链接的规则
link = LinkExtractor(allow=r'/daxuexiaohua/\d{1,10}\.html')
rules = (
# 这里我们先爬取当前页测试下。follow=False
Rule(link, callback='parse_item', follow=False),
)
运行工程,看下效果:
scrapy crawl first
链接就获取到了。
全部代码first.py
:
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class FirstSpider(CrawlSpider):
name = 'first'
# allowed_domains = ['www.xxx.com']
start_urls = ['http://www.521609.com/daxuexiaohua/']
# 实例化LinkExtractor对象
# 链接提取器:根据规则(allow参数) ,在页面中进行(url)爬取
# allow='正则':提取链接的规则
link = LinkExtractor(allow=r'/daxuexiaohua/\d{1,10}\.html')
rules = (
# 实例化一个Rule对象
# 规则解析器:接收链接提取器提取到的链接,对其发起请求,然后根据指定规则(callback)解析数据
Rule(link, callback='parse_item', follow=False),
)
def parse_item(self, response):
print(response)
怎么爬取该页面的所有链接呢?
其实就是一句代码:
link = LinkExtractor(allow=r'')
怎么过滤不是521609.com
的链接?
# 打开设置allowed_domains即可
allowed_domains = ['521609.com']
注意:
- 一个链接提取器对应一个规则解析器(多个链接提取器和多个规则解析器)
- 在实现深度爬取的过程中需要和
scrapy.Requests()
结合使用
下节课讲CrawlSpider实现深度爬取