Python 爬虫- scrapy 入门

scrapy 入门

  • scrapy 框架创建步骤
    1. 创建一个 scrapy 项目
      • scrapy startproject <project_name>
    2. 生成一个爬虫
      • scrapy genspider <name> <domain>
    3. 提取数据
      • 完善 spider ,通过 xpath 等方法
    4. 保存数据
      • pipeline 中保存数据
    5. 运行项目
      • scrapy crawl <project_name>

1 创建 scrapy 项目

  • 以下代码(创建-保存)仅做示范,不代表是一个完整的项目,不具有完全的连贯性

  • 命令:scrapy startproject <项目名称>

    • 例如:

      scrapy startproject myspider
      
    • 创建成功
      image-20211202144544455

  • 创建之后有一个在当前目录下新建一个工程目录
    image-20211202194628902

2 创建爬虫

  • 命令scrapy genspider <爬虫名字> <允许爬取的域名>

    • 例如:

      scrapy genspider zhangshan xingfa.org
      
    • 爬虫文件创建成功
      image-20211203101435559

  • 注意:要在工程文件的 spiders 文件夹下面再创建爬虫

3 提取数据(完善 spider)

  • 简单完善的 spider
    image-20211206092112532

  • 从选择器中提取字符串:

    1. extract():返回一个包含字符串数据的列表
    2. extract_first():返回列表第一个字符串
    • 这个有什么用
      • 只输出字符串
      • 可以检查代码运行情况
        • 如果返回得到一个空,则可能是前面出问题
        • 如果返回得到一个列表内值为 NULL 或者报错,则是当前步骤出错
  • 注意:

    1. spider 中的 parse 方法名不能修改
    2. 需要爬取的 url 地址必须是属于 allow_domin 下的链接
    3. response.xpath 返回的是一个含有 selector 对象[^11]的列表
  • 在 scrapy 中遇到空字符换行符时使用normalize-space()

    • 例如:

      #前:
      play = g.xpath('.//span[@class="so-icon watch-num"]/text()').extract()
      #后
      play = g.xpath('normalize-space(.//span[@class="so-icon watch-num"]/text())').extract()
      
      #前
      'play': '\n        238.1万\n      '
      #后
      'play': '256.2万'
      
    • 注意:

      • 通过 xpath 得到的列表,必须先对列表进行遍历再用这个方法,否则结果只有一个内容

4 spider 数据传到 pipline

  • 完善后的 Spider
    image-20211206095747997
    • 这里为什么使用 yield ,而不使用 return
      • 首先明确,这 yeild 和 return 都可以使用,但是 yield 具备 return 的功能同时还具备一些 return 不具有的功能
    • yield 本身是一个函数,而主要用的是包含 yield 的函数的函数(这个函数称为生成器[^12]),生成器每次产生一个值,函数被冻结,被唤醒后再产生一个值
    • 生成器作用:不会导致内存的占用量瞬间变高,更节省存储空间,响应更迅速,使用更灵活

5 保存数据(使用pipeline)

  • 完善的 pipline
    image-20211206094259454
  • 完成 pipeline 后,需要在 setting 中设置开启 pipeline
    image-20211206094721022
    • 注意:
      • pipeline 的权重越小优先级越高
      • pipeline 中的 process_item 方法名不能修改为其他名称
posted @   你是我的生命之源  阅读(174)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
页脚
点击右上角即可分享
微信分享提示