基于CrawlSpider全栈数据爬取

  • 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

原文地址:https://www.cnblogs.com/bigox/p/11453612.html

时间: 2024-08-26 20:18:46

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

数据挖掘工具分析北京房价 (一) 数据爬取采集

一. 前言 房价永远是最让人头疼且激动的话题,尤其是在帝都,多少人一辈子都为了一套房子打拼.正好我也想用一个大家比较关心的话题作为案例,把目前我开发的这套软件进行一次完整的演练.从数据采集,到清洗,分析,和最终可视化和报告的呈现,实现一次完整的流程.一方面可以给大家切实的分享一些有用的信息,再者可以更好地了解这套软件的使用流程.  关于本工具的介绍,可参考数据挖掘平台介绍(综述)——平台简介. 自然的,文章分为四部分,本节是第一部分:数据爬取和采集. 二.  准备工作 俗话说巧妇难为无米之炊,没

python实现数据爬取-清洗-持久化存储-数据平台可视化

基于python对淘宝模特个人信息进行筛选爬取,数据清洗,持久化写入mysql数据库.使用django对数据库中的数据信息筛选并生成可视化报表进行分析. 数据爬取,筛选,存库: # -*- coding:utf-8 -*-   import requests from bs4 import BeautifulSoup import sys import re reload(sys) sys.setdefaultencoding('utf-8') import MySQLdb import cha

爬虫学习 09.移动端数据爬取

爬虫学习 09.移动端数据爬取 前言 随着移动市场的火热,各大平台都陆陆续续的推出了自己的移动端APP来拉拢吸引和便捷其广大的用户.那么在移动端的平台当时势必会出现大量有价值的信息和数据,那这些数据我们是否可以去享用一下呢?那么接下来就进入我们的移动端APP数据的爬虫中来吧. 今日概要 fiddler简介 手机APP抓包设置 fiddler设置 安装证书下载 安全证书安装 局域网设置 fiddler手机抓包测试 今日详情 1 什么是Fiddler? Fiddler是位于客户端和服务器端的HTTP

python实现人人网用户数据爬取及简单分析

这是之前做的一个小项目.这几天刚好整理了一些相关资料,顺便就在这里做一个梳理啦~ 简单来说这个项目实现了,登录人人网并爬取用户数据.并对用户数据进行分析挖掘,终于效果例如以下:1.存储人人网用户数据(户主的全部好友.户主好友的全部好友.户主及好友关注的公共主页).2.信息可视化,绘制户主好友间的关系网络图:3.数据挖掘,通过分析户主好友关注的公共主页,向户主推荐公共主页. 项目分为三个部分,各自是人人网登录及用户数据爬取与存储.用户关系可视化.公共主页推荐.以下分别介绍这三个部分. 第一部分实现

基于MEAN全栈架构的多用户博客系统(Angular2+Node+MongoDB)

基于MEAN全栈架构的多用户博客系统(Angular2+Node+MongoDB)课程学习地址:http://www.xuetuwuyou.com/course/223课程出自学途无忧网:http://www.xuetuwuyou.com 课程介绍一.课程简介MEAN是一个Javascript平台的现代Web开发框架总称,它是MongoDB + Express +AngularJS + NodeJS 四个框架的第一个字母组合.它与传统LAMP一样是一种全套开发工具的简称.本课程结合项目全面系统的

Python爬虫 股票数据爬取

前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/000001/ctrl/2017/displaytype/4.phtml 在浏览器(PC上)中打开这个地址,就可以看到下图显示的财务数据.这个地址是一个通用格式:(

爬虫案例—中基协数据爬取

因为工作原因,需要爬取相关网站的数据,包括中基协网站和天眼查部分数据. 一.中基协网站 爬取思路: 1.查看目标页:http://gs.amac.org.cn/amac-infodisc/api/pof/manager?rand=0.9775162173180119&page=%s&size=50 发现有随机数字串(刷新反爬措施),以及页码和每页信息条数,可以用来拼接爬取url 用一个循环爬取所有展示页面,用到requests库以及random函数生成随机数 返回的是json数据,直接用r

爬虫1.5-ajax数据爬取

目录 爬虫-ajax数据爬取 1. ajax数据 2. selenium+chromedriver知识准备 3. selenium+chromedriver实战拉勾网爬虫代码 爬虫-ajax数据爬取 1. ajax数据 ajax (异步JavaScript 和 XML)(读作阿贾克斯),ajax可以时网页实现异步更新,一般使用的json数据交互,即在不重新加载整个页面也可以对网页的部分进行更新,ajax技术加载的数据在网页源代码中是看不到的,只能看到url加载的html部分 获取ajax数据的两

Python爬虫入门教程 15-100 石家庄政民互动数据爬取

1. 石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的.网址为http://www.sjz.gov.cn/col/1490066682000/index.html 首先声明,为了学习,绝无恶意抓取信息,不管你信不信,数据我没有长期存储,预计存储到重装操作系统就删除. 2. 石家庄政民互动数据爬取-网页分析 点击更多回复 ,可以查看到相应的数据. 数据量很大14万条,,数据爬完,还可以用来学习数据分析,真是nice 经