目录

  • 前言
  • scrapy 数据流
  • scrapy 组件
  • 爬取豆瓣电影 Top250
  • 后记
  • 送书后话

前言

为什么要学 scrapy 呢?看下图,就清楚了。很多招聘要求都有 scrapy,主要是因为 scrapy 确实很强。那到底强在哪里呢?请在文中找答案。

scrapy 数据流

首先我们先来学习一下 scrapy 的工作流程。scrapy 文档地址

1、爬虫引擎获得初始请求开始抓取。 2、爬虫引擎开始请求调度程序,并准备对下一次的请求进行抓取。 3、爬虫调度器返回下一个请求给爬虫引擎。 4、引擎请求发送到下载器,通过下载中间件下载网络数据。 5、一旦下载器完成页面下载,将下载结果返回给爬虫引擎。 6、引擎将下载器的响应通过中间件返回给爬虫进行处理。 7、爬虫处理响应,并通过中间件返回处理后的items,以及新的请求给引擎。 8、引擎发送处理后的items到项目管道,然后把处理结果返回给调度器,调度器计划处理下一个请求抓取。 9、重复该过程(继续步骤1),直到爬取完所有的 url 请求。

scrapy 组件

爬虫引擎

爬虫引擎负责控制各个组件之间的数据流,当某些操作触发事件后都是通过engine来处理。

调度器

调度接收来engine的请求并将请求放入队列中,并通过事件返回给engine。

下载器

通过engine请求下载网络数据并将结果响应给engine。

Spider

Spider发出请求,并处理engine返回给它下载器响应数据,以items和规则内的数据请求(urls)返回给engine。

item pipeline

负责处理engine返回spider解析后的数据,并且将数据持久化,例如将数据存入数据库或者文件。

download middleware

下载中间件是engine和下载器交互组件,以钩子(插件)的形式存在,可以代替接收请求、处理数据的下载以及将结果响应给engine。

spider middleware

spider中间件是engine和spider之间的交互组件,以钩子(插件)的形式存在,可以代替处理response以及返回给engine items及新的请求集。

爬取豆瓣电影 Top250

安装

pip install scrapy
复制代码

初始化爬虫

scrapy startproject doubanTop250(项目名称)
复制代码

目录架构如下,其中 douban_spider.py 为手动创建。

启动爬虫

scrapy crawl douban(后面会解释,这个 dougban 是从哪里来的,此处先留一个小坑)
复制代码

spider

以下代码为 douban_spider.py ,里面都有相应的注释,以方便理解

class RecruitSpider(scrapy.spiders.Spider):# 此处为上面留下的小坑,即是设置爬虫名称name = "douban"# 设置允许爬取的域名allowed_domains = ["douban.com"]# 设置起始 urlstart_urls = ["https://movie.douban.com/top250"]# 每当网页数据 download 下来,就会发送到这里进行解析# 然后返回一个新的链接,加入 request 队列def parse(self, response):item = Doubantop250Item()selector = Selector(response)Movies = selector.xpath('//div[@class="info"]')for eachMovie in Movies:title = eachMovie.xpath('div[@class="hd"]/a/span/text()').extract()  # 多个span标签fullTitle = "".join(title)movieInfo = eachMovie.xpath('div[@class="bd"]/p/text()').extract()star = eachMovie.xpath('div[@class="bd"]/div[@class="star"]/span/text()').extract()[0]quote = eachMovie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()# quote 可能为空,这里进行判断一下if quote:quote = quote[0]else:quote = ''item['title'] = fullTitleitem['movieInfo'] = ';'.join(movieInfo)item['star'] = staritem['quote'] = quoteyield itemnextLink = selector.xpath('//span[@class="next"]/link/@href').extract()# 第10页是最后一页,没有下一页的链接if nextLink:nextLink = nextLink[0]yield Request(urljoin(response.url, nextLink), callback=self.parse)
复制代码

pipelines

每当 spider 分析完 HTML 之后,变会返回 item,传递给 item pipelines。上面代码中:

yield item
复制代码

便是返回的数据。 一般 pipelines 常用于:

  • 检查是否有某些字段
  • 将数据存进数据库
  • 数据查重 由于只是初步尝试一下 scrapy 爬虫,所以这里我没有进行修改
class Doubantop250Pipeline(object):def process_item(self, item, spider):return item
复制代码

items

定义我们需要获取的字段

class Doubantop250Item(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()  # 电影名字movieInfo = scrapy.Field()  # 电影的描述信息,包括导演、主演、电影类型等等star = scrapy.Field()  # 电影评分quote = scrapy.Field()  # 脍炙人口的一句话pass
复制代码

setting

settings.py 定义我们爬虫的各种配置,由于这里是初步了解 scrapy 故相应的介绍会在后面。

启动爬虫

scrapy crawl douban
复制代码

后记

关于豆瓣电影的小爬虫就下完了,后面会深入解析一下 scrapy 的高级用法。

送书后话

由于其中一位中奖者没有及时领取相应的奖品,即视该中奖者放弃相应的奖品。经过查看后台的数据,我决定将这个名额给【薯条】这位读者

scrapy 爬虫利器初体验(1)相关推荐

  1. python的scrapy爬虫模块间进行传参_小猪的Python学习之旅 —— 4.Scrapy爬虫框架初体验...

    小猪的Python学习之旅 -- 4.Scrapy爬虫框架初体验 Python 引言: 经过前面两节的学习,我们学会了使用urllib去模拟请求,使用 Beautiful Soup和正则表达式来处理网 ...

  2. 爬虫利器初体验 scrapy,爬取豆瓣电影

    目录 前言 scrapy 数据流 scrapy 组件 爬取豆瓣电影 Top250 后记 送书后话 前言 为什么要学 scrapy 呢?看下图中的招聘要求,就清楚了.很多招聘要求都有 scrapy,主要 ...

  3. Scrapy 爬虫框架初体验二 —— 以一个新闻站点爬取为例

    一.搭建基础 Scrapy 工程框架 创建项目 输入如下命令: scrapy startproject NewsSpider # 创建项目 cd NewsSpider scrapy genspider ...

  4. Scrapy 爬虫框架初体验三 —— 工程优化及其完善

    一.工程优化及其完善 日志系统及定时过期删除日志文件 在工程目录中的 settings.py 添加如下修改: import logging from scrapy.utils.log import c ...

  5. scrapy爬虫框架初相识

    自己新建一个文件夹: 然后执行命令: scrapy startproject python123demo 查看里面的东西: D:\pythonscrapy>tree /f >.txt 卷 ...

  6. 自学爬虫的初体验(一)

    一.爬虫是什么 爬虫就是将互联网上的信息提取并下载到本地的过程 1.由客户端发起请求(url,data) 2.服务器响应内容(html.css.js.json) 请求方式: 1.GET 2.POST: ...

  7. 【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  8. 从入门到入土:python爬虫|scrapy初体验|安装教程|爬取豆瓣电影短评相关信息(昵称,内容,时间和评分)

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  9. 爬虫Scrapy框架初体验

    目录结构: |写在前面: |依葫芦画瓢: |       | 安装: |       | 概述: |       | 创建一个scrapy项目 |       | 第一个scrapy蜘蛛 |      ...

最新文章

  1. 黑盒测试之功能分解法
  2. 自学python推荐书籍知乎-据说是最丰富的程序员书籍资源,知乎数千人偷偷收藏!...
  3. PHP魔术方法__tostring()篇
  4. 【解决方案】win10连接wifi输入密码之后用户就消失了
  5. python可视化文本分析(1)—分析QQ班群聊天记录宏观
  6. 第一章--计算机系统知识
  7. MS SQL 2008 发布订阅配置错误总结
  8. 字符串16进制数字转换到Ascll字符串
  9. Babel指南——基本环境搭建
  10. windows找不到文件gpedit.msc_极简技术|电脑文件全搜索,没有找不到的东西
  11. html里怎么引用php代码,如何实现在html引用php代码,不是简单的?php ?
  12. 软件项目组织与管理期末考试复习要点整理翻译
  13. 艾肯声卡VST新款驱动下载自带机架效果无需做跳线_小伙音频工作室分享
  14. 灵活运用用第3方软件把“SWF”变回“FLA”
  15. android vpn 工具下载,豌豆荚塑造安卓应用墙 App下载量破20万
  16. 移动开发----byte(字节)根据长度转成KB(千字节)和MB(兆字节)
  17. OSChina 周三乱弹 —— 有种思念叫忘穿秋裤
  18. 【 Ubuntu 】clang 编译器
  19. java环境变量设置和切换版本
  20. 2023年2022年Cfa一级考纲变化分析

热门文章

  1. java 枚举放那个包,java枚举,包装类,math使用
  2. mysql修改表字段小数点精度,mysql – 如何配置Rails以在表单字段中以正确的精度输出小数?...
  3. 解决PHPStudy8.1.1 mySQL服务启动失败 数据库工具报错卡死
  4. CA7 ROLL B 选项
  5. vb中如何在任务管理器里面隐藏应用程序进程
  6. CSS+DIV:理论实战缺一不可
  7. 世界首个机器人观音在岛国问世,请问AI开光还会远吗?
  8. 每单配送费41元,Nuro无人车正式开始自动驾驶送货
  9. 干货 | 如何写一个更好的Python函数?
  10. 拿到软银巨额投资后,通用无人车部门Cruise可能要单独IPO了