Python爬虫从入门到精通:(35)CrawlSpider基础_Python涛哥

45 篇文章 18 订阅

CrawlSpider:

概念:其实是Spider的一个子类。Spider是爬虫文件中爬虫类的父类.

  • 子类的功能一定是多余父类.

作用:被用作于专业实现全站数据爬取

  • 将一个页面下所有页面对应的数据进行爬取

基本使用:

  1. 创建一个工程
  2. cd 工程
  3. 创建一个基于CrawlSpider的爬虫文件
    • scrapy genspider -t crawl SpiderName www.xxx.com

示例

创建一个工程crawlPro

  1. scrapy startproject crawlPro
  2. cd crawlPro
  3. scrapy genspider -t crawl first www.xxx.com
  4. 修改配置文件(跟之前正常操作一样)

创建出来的应该是这样:

在这里插入图片描述

任务:爬取校花网源码里的所有链接

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']


注意

  1. 一个链接提取器对应一个规则解析器(多个链接提取器和多个规则解析器)
  2. 在实现深度爬取的过程中需要和scrapy.Requests()结合使用

下节课讲CrawlSpider实现深度爬取

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值