• CrawlSpider就是爬虫类Spider的一个子类

使用流程

  1. 创建一个基于CrawlSpider的一个爬虫文件 :scrapy genspider -t crawl spider_name www.xxx.com
  2. 构造链接提取器和规则解析器
    • 链接提取器:

      • 作用:可以根据指定的规则进行指定连接的提取
      • 提取的规则: allow = "正则表达式"
      • 会先在全局匹配所有的url,然后根据参数allow的规则匹配需要的链接
    • 规则解析器
      • 作用:获取链接提取器提取到的链接,对其进行请求发送,根据指定的规则对请求道的页面源码数据进行数据解析.-
      • fllow = True 参数的作用: 将链接提取器继续作用到链接提取器提取到的页码链接所对应的页面中
  3. 注意事项:
    • 链接提取器和规则解析器是一一对应关系

示例代码

  • 基于CrawlSpider实现深度数据爬取

    • spider文件
    # -*- coding: utf-8 -*-
    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    from sunspider.items import SunspiderItem, SunspiderItemSecond class SunSpiderSpider(CrawlSpider):
    name = 'sun_spider'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4&page=']
    # 链接提取器 两层数据爬取,写两个链接提取器,链接提取器和规则解析器是一一对应关系
    link = LinkExtractor(allow=r'type=4&page=\d+')
    link_detail = LinkExtractor(allow=r'question/\d+/\d+\.shtml')
    rules = (
    # 实例化Rule(规则解析器)的对象
    Rule(link, callback='parse_item', follow=True),
    Rule(link_detail, callback='parse_item_content', follow=True), ) def parse_item(self, response):
    tr_list = response.xpath('//*[@id="morelist"]/div/table[2]//tr/td/table//tr')
    for tr in tr_list:
    title = tr.xpath('./td[2]/a[2]/@title').extract_first()
    status = tr.xpath('./td[3]/span/text()').extract_first()
    num = tr.xpath('./td[1]/text()').extract_first()
    item = SunspiderItem()
    item['title'] = title
    item['status'] = status
    item['num'] = num
    yield item def parse_detail(self, response):
    content = response.xpath('/html/body/div[9]/table[2]/tbody/tr[1]//text()').extract()
    content = ''.join(content)
    num = response.xpath('/html/body/div[9]/table[1]/tbody/tr/td[2]/span[2]/text()').extract_first()
    if num:
    num = num.split(':')[-1]
    item = SunspiderItemSecond()
    item['content'] = content
    item['num'] = num
    yield item
    • items.py文件

      import scrapy
      # 定义两个类,并且通过某种方式(num)标识两个类之间的对应关系
      class SunspiderItem(scrapy.Item):
      title = scrapy.Field()
      status = scrapy.Field()
      num = scrapy.Field() class SunspiderItemSecond(scrapy.Item):
      content = scrapy.Field()
      num = scrapy.Field()
    • pipelines.py文件

      • 存储数据
      class SunspiderPipeline(object):
      def process_item(self, item, spider):
      # 判断item是哪一个类封装
      if item.__class__.__name__ == "SunspiderItemSecond":
      content = item['content']
      num = item['num']
      print(content, num)
      else:
      title = item['title']
      status = item['status']
      num = item['num'] print(title, status, num)
      return item

基于CrawlSpider全栈数据爬取的更多相关文章

  1. 爬虫系列---scrapy全栈数据爬取框架(Crawlspider)

    一 简介 crawlspider 是Spider的一个子类,除了继承spider的功能特性外,还派生了自己更加强大的功能. LinkExtractors链接提取器,Rule规则解析器. 二 强大的链接 ...

  2. scrapy框架基于CrawlSpider的全站数据爬取

    引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...

  3. requests模块session处理cookie 与基于线程池的数据爬取

    引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如: #!/usr/bin/ ...

  4. Python网络爬虫之cookie处理、验证码识别、代理ip、基于线程池的数据爬去

    本文概要 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时, ...

  5. Scrapy 框架 CrawlSpider 全站数据爬取

    CrawlSpider 全站数据爬取 创建 crawlSpider 爬虫文件 scrapy genspider -t crawl chouti www.xxx.com import scrapy fr ...

  6. 基于 PHP 的数据爬取(QueryList)

    基于PHP的数据爬取 官方网站站点 简单. 灵活.强大的PHP采集工具,让采集更简单一点. 简介: QueryList使用jQuery选择器来做采集,让你告别复杂的正则表达式:QueryList具有j ...

  7. requests模块处理cookie,代理ip,基于线程池数据爬取

    引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的. 一.基于requests模块 ...

  8. 全栈数据工程师养成攻略:Python 基本语法

    全栈数据工程师养成攻略:Python 基本语法 Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解一些 ...

  9. 人人贷网的数据爬取(利用python包selenium)

    记得之前应同学之情,帮忙爬取人人贷网的借贷人信息,综合网上各种相关资料,改善一下别人代码,并能实现数据代码爬取,具体请看我之前的博客:http://www.cnblogs.com/Yiutto/p/5 ...

随机推荐

  1. startActivityForResult跳转后回调数据

    从AActivity向BActivity跳转后,关闭BActivity并向AActivity回调一些数据: 建立AActivity.java文件: 1 public class AActivity e ...

  2. 从ELF文件谈起

    本文信息来源: 又是一期硬核内容:ELF文件格式 What's the difference of section and segment in ELF file format ELF Section ...

  3. PHP-文件上传封装类

    <?php $file = $_FILES['img']; $obj = new File(); $res = $obj->upload($file,'upload'); if($res) ...

  4. Laravel 自定命令以及生成文件

    以创建service层为例子 1.执行命令 php artisan make:command ServiceMakeCommand 2.在app\Console\Commands 下就会多出一个 Se ...

  5. 从零开始,开发一个 Web Office 套件(9):拖动鼠标选中文字 Edge Case

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  6. Python 从底层结构聊 Beautiful Soup 4(内置豆瓣最新电影排行榜爬取案例)

    1. 前言 什么是 Beautiful Soup 4 ? Beautiful Soup 4(简称 BS4,后面的 4 表示最新版本)是一个 Python 第三方库,具有解析 HTML 页面的功能,爬虫 ...

  7. UOJ188题解

    我们先枚举一个最大质因子,然后设 \(dp[n][k]\) 为 \(n\) 以内使用了 \(pri[k]\) 以内的质数的数的最大质因子之和,答案就是: \[\sum_{k\leq n}dp[\lfl ...

  8. 监督学习,无监督学习常用算法集合总结,引用scikit-learn库(监督篇)

    why写这篇blog 最近在接触这方面的知识,但是找了许多的笔记,都感觉没有很好的总结出来,也正好当做是边学习,边复习着走.大佬轻喷.参考书目<python机器学习基础教程> 将分别从以下 ...

  9. 【dubbo3.x trace组件分享】

    目录 背景 一.trace-dubbo组件介绍 二.设计原理 2.1 原理图 2.2 实现方案 2.2.1 consumer端实现 2.2.2 provider端实现 2.2.3 traceId和sp ...

  10. c# winform 窗体 对话框绑定的值如何填到主窗体问题

    这段代码放在主窗体中 private void txt_KeJiaAModel_DoubleClick(object sender, EventArgs e) { TimerEvent(); } // ...