1.Scrapy at a glance

简介

Scrapy 一个爬虫框架。

代码示例

scrapy 运行单个爬虫文件,爬取 [http://quotes.toscrape.com/tag/humor/] 上的名言和作者

import scrapy

class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    start_urls = ['http://quotes.toscrape.com/tag/humor/']

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('.text::text').extract_first(),
                'author': quote.xpath('span/small/text()').extract_first(),
            }
        next_page = response.css('.next a::attr(href)').extract_first()
        if next_page:
            yield response.follow(next_page, self.parse)

在命令行中执行: scrapy runspider quotes_spider.py -o quotes.csv 将结果输出到 quotes.csv

运行流程:

  • scrapy 根据 start_urls 发送GET请求。当响应返回时,调用默认的回调函数 parse()。
  • 在 parse() 中,使用 XPath 或 CSS选择器 提取数据(字典格式),并通过 response.follow() 发送 "下一页" 的 GET请求

Scrapy 优点

  • HTTP请求的发送和响应的处理是异步的。
  • 可以连续发送多个请求,不必的等待是一个请求的响应处理完成。
  • 当一个请求在发送/处理的过程中发生错误时,不会影响其他请求。

限速

为了避免 scrapy 快速地发送多个请求,可以使用一些设置来进行限速:

  • 在 settings.py 中配置请求之间的延迟;每个网站的线程数
  • 在 settings.py 中配置 auto-throttling 扩展,根据前面的响应时间自动调试请求间的延迟

保存结果

  • 通过 feed exports 可以将结果保存为 csv, json, jl, xml 格式 或 保存到 FTP, Amazon S3 上
  • 通过 pipeline 可以将结果保存到数据库中

Scrapy 的其他优点:

  • 通过 XPath, CSS选择器,正则表达式 提取数据
  • 通 IPython 来测试提取表达式
  • 内置将结果保存为多种格式和存储系统
  • 强大的 HTTP 解码能力
  • 通过 signals, middlewares, extensions, pipeline 来扩展 scrapy
  • 自带的扩展和中间件用于处理 cookie, session, http 缓存/认证, robots.txt, User-Agent, 爬取深度限制
  • 通过 Telnet console 用来调试正在运行低爬虫

猜你喜欢

转载自www.cnblogs.com/mining/p/9962440.html