Scrapy各spider简介

Scrapy 框架把爬虫从初始 URL 构造 Request 到爬取,再到解析 Response 等各功能抽象为各种组件。对于一般的网站,如果没有什么反爬(或者反爬不是很变态),使用者要做的就是实现针对特定网站的 spider。

Spider 主要用于定义爬取行为,包括构造 Request,定义规则抽取超链接,从 Response 解析出结构化数据。

具体来说,各功能主要实现为:

  • 构造 Request
    • 最简单的方法只需要将待爬取的 URL 放入start_urls列表就可以,Scrapy 会使用默认 headers 等构造 Request
    • 如果需要对 Request 进行设置,则需要自己实现 start_requests 方法(start_urls默认也是调用本方法)
  • 定义超链接抽取规则:实例化scrapy.spiders.Rule生成规则,由于内容较多,后续会进行更新讲解,可参考:https://docs.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Rule
  • 解析结构化数据:默认调用parse解析(CrawlSpider 默认调用parse_start_url),在解析函数内抽取数据和新的链接。

下面介绍 Scrapy 提供的几种爬虫的属性和方法。

scrapy.spiders.Spider

最简单的 spider,其他的 spider 都继承自它。我们一般要实现的定向爬虫也直接继承它。

属性

  • name爬虫名称(string,类属性),在一个 Scrapy 工程内,name 必须唯一,因为使用scrap crawl <name>运行时就是根据它查找 spider。
  • allowed_domains允许爬取的域名(list,类属性),只有在该域列表内的 URL 才会被爬取,不然就被过滤掉(默认OffsiteMiddleware设置被打开)。
    对于域的设置,比如要爬取京东,则设置:allowed_domains = ['jd.com', 'jd.hk']
  • start_urls爬虫启动的初始 URL(list,类属性),在通用爬虫中,设置为入口 URL,利用规则则可以爬取整个网站。
  • custom_settingsScrapy 的 spider 级别配置(dict,类属性),Scrapy 的配置分为 5 级别:
    • Command line options (优先级最高)
    • Settings per-spider,custom_settings就处于这个级别
    • Project settings module
    • Default settings per-command
    • Default global settings (优先级最低)
  • crawler,在 spider 类方法from_crawler()中设置,绑定Crawler对象到 spider 实例。目前不是很了解,参见:https://docs.scrapy.org/en/latest/topics/api.html#topics-api-crawler
  • settings爬虫最终配置,参见:https://docs.scrapy.org/en/latest/topics/settings.html#topics-settings
  • logger,用于打印日志,使用name创建。

方法

  • from_crawler(cls, crawler, *args, **kwargs),类方法,用于创建 spider,一般不用重写。本方法设置的crawlersettings属性用于爬虫运行时进入 spider。
  • start_requests(self),迭代器,返回由 URL 构造的 Request,作为入口在爬虫启动时自动运行。实现了本方法,则忽略start_urls。当然,方法内使用start_urls另说。
  • parse(self, response),迭代器,默认 Response 解析函数。
  • closed(self, reason),爬虫关闭时自动运行,实现了spider_closed信号绑定。

示例

import scrapy
from myproject.items import MyItem

class MySpider(scrapy.Spider):
    name = 'example.com'
    allowed_domains = ['example.com']

    def start_requests(self):
        yield scrapy.Request('http://www.example.com/1.html', self.parse)
        yield scrapy.Request('http://www.example.com/2.html', self.parse)
        yield scrapy.Request('http://www.example.com/3.html', self.parse)

    def parse(self, response):
        for h3 in response.xpath('//h3').extract():
            yield MyItem(title=h3)

        for url in response.xpath('//a/@href').extract():
            yield scrapy.Request(url, callback=self.parse)

scrapy.spiders.CrawlSpider

继承自 Spider,用于需要追踪页面链接的通用网站爬虫。除了继承的属性和方法,新增:

属性

  • rulesRule 对象(list,类属性),用于自动抽取页面链接。

方法

  • parse_start_url(self, response)start_urls爬取返回的 Response 默认解析函数。

scrapy.spiders.XMLFeedSpider

参见:https://docs.scrapy.org/en/latest/topics/spiders.html#xmlfeedspider

scrapy.spiders.CSVFeedSpider

参见:https://docs.scrapy.org/en/latest/topics/spiders.html#csvfeedspider

scrapy.spiders.SitemapSpider

参见:https://docs.scrapy.org/en/latest/topics/spiders.html#sitemapspider

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值