scrapy 教程

本文详细介绍了Scrapy爬虫框架的各个方面,包括初窥Scrapy、安装指南、基本使用、Scrapy入门教程、爬虫创建、Item定义、请求与响应处理、中间件的使用以及在Pycharm中调试Scrapy爬虫的方法。文章强调了Scrapy的异步特性,允许高效地抓取数据,并提供了多个示例和实际操作步骤。此外,还涵盖了如何设置User-Agent、处理重定向、使用下载器中间件和Spider中间件等高级主题。
摘要由CSDN通过智能技术生成

------------------------------------------------------------------------------------------
scrapy 中文文档 和 scrapy 英文文档参照看。因为中文文档比较老,英文文档是最新的。
scrapy 英文文档:https://doc.scrapy.org/en/latest
scrapy 中文文档:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html高性能爬虫 Scrapy 框架https://www.cnblogs.com/wwg945/articles/9021888.html
------------------------------------------------------------------------------------------scrapy-redis 配置:https://www.cnblogs.com/wwg945/articles/9046232.html
基于 Scrapy-redis 的分布式爬虫设计:https://www.jianshu.com/p/cd4054bbc757
------------------------------------------------------------------------------------------

Scrapy爬虫入门教程:https://www.jianshu.com/p/43029ea38251
------------------------------------------------------------------------------------------

scarpy 是一个爬虫框架,而 scrapyd 是一个网页版管理 scrapy 的工具, scrapy爬虫写好后,可以用命令行运行,但是如果能在网页上操作就比较方便。 scrapyd 就是为了解决这个问题,能够在网页端查看正在执行的任务,也能新建爬虫任务,和终止爬虫任务,功能比较强大。 还有一个更加强大的国产工具 gerapy
Scrapyd 使用详解:https://blog.csdn.net/fengltxx/article/details/79889340
Gerapy分布式爬虫管理框架:https://cuiqingcai.com/4959.html

scrapy_redis去重优化(已有7亿条数据),附Demo福利:https://blog.csdn.net/bone_ace/article/details/53099042

scrapy 框架系列教程:http://www.cnblogs.com/xinyangsdut/p/7628770.html

scrapy 系列教程 - 设置随机 user-agent:https://www.cnblogs.com/cnkai/p/7401343.html

Python分布式爬虫打造搜索引擎Scrapy精讲 系列教程—将bloomfilter(布隆过滤器)集成到scrapy-redis中https://www.cnblogs.com/adc8868/p/7442306.html

scrapy-redis分布式爬虫的搭建过程:https://blog.csdn.net/zwq912318834/article/details/78854571

Scrapy第三篇(基于Scrapy-Redis的分布式以及cookies池):https://cuiqingcai.com/4048.html

scrapy 下载中间件用法:https://www.cnblogs.com/zhaof/p/7198407.html

scrapy 设置代理:使用 IP 代理池            middleware设置proxy代理           

关于 scrapy 重定向: 禁止重定向的解决方法:https://www.zhaokeli.com/article/8046.html

https://blog.csdn.net/amaomao123/article/details/52511882

内容都是从官方文档整理过来的,只整理一部分,要想深入了解,可以看官方文档

scrapy整体架构图

Scrapy主要组件

1、引擎(Scrapy):用来处理整个系统的数据流处理, 触发事务(框架核心)。2、调度器(Scheduler):用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址。3、下载器(Downloader): 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)。4、爬虫(Spiders): 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。5、项目管道(Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。6、下载器中间件(Downloader Middlewares): 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。7、爬虫中间件(Spider Middlewares): 介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。8、调度中间件(Scheduler Middewares): 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

表格:

组件 功能
引擎(Scrapy) 用来处理整个系统的数据流处理, 触发事务(框架核心)
调度器(Scheduler) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
下载器(Downloader) 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted上的)
爬虫(Spiders) 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
项目管道(Pipeline) 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据
下载器中间件(Downloader Middlewares) 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应
爬虫中间件(Spider Middlewares) 介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出
调度中间件(Scheduler Middewares) 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应

Scrapy 框架 的 运行流程:

  • 首先,引擎 从 调度器 中 取出一个链接(URL) 用于 接下来的抓取
  • 引擎 把 URL封装成一个 请求(Request) 传给下载器
  • 下载器 把 资源下载下来,并 封装成 应答包(Response)
  • 爬虫(指自己写的爬虫程序Spider) 解析 应答包(Response)
  • 如果 爬虫 从 Response 中 解析出的是实体(Item),则把 Item(实体) 交给 管道 进行进一步的处理。
  • 如果 爬虫 从 Response 中 解析出的是链接(URL),则把 URL 交给 Scheduler 等待抓取

scrapy 框架 中 的 spider 爬取流程

对 spider 来说,爬取的循环类似下文:

  1. 以初始的URL初始化Request,并设置回调函数。 当该request下载完毕并返回时,将生成response,并作为参数传给该回调函数。

    spider中初始的request是通过调用 start_requests() 来获取的。 start_requests() 读取 start_urls 中的URL, 并以 parse 为回调函数生成 Request 。

  2. 在回调函数内分析返回的(网页)内容,返回 Item 对象、dict、 Request 或者一个包括三者的可迭代容器。 返回的Request对象之后会经过Scrapy处理,下载相应的内容,并调用设置的callback函数(函数可相同)。

  3. 在回调函数内,您可以使用 选择器(Selectors) (您也可以使用BeautifulSoup, lxml 或者您想用的任何解析器) 来分析网页内容,并根据分析的数据生成item。

  4. 最后,由spider返回的item将被存到数据库(由某些 Item Pipeline 处理)或使用 Feed exports 存入到文件中。

虽然该循环对任何类型的spider都(多少)适用,但Scrapy仍然为了不同的需求提供了多种默认spider。 

可以查看官方文档了解更多关于不同需求的spider。

初窥Scrapy

        Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了 网络抓取 所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

一窥示例spider       

为了让您了解Scrapy提供了什么功能,我们将提供一个Scrapy Spider的示例,并且以最简单的方式启动该spider。以下的代码将跟进StackOverflow上具有投票数最多的链接,并且爬取其中的一些数据:

import scrapy


class StackOverflowSpider(scrapy.Spider):
    name = 'stackoverflow'
    start_urls = ['http://stackoverflow.com/questions?sort=votes']

    def parse(self, response):
        for href in response.css('.question-summary h3 a::attr(href)'):
            full_url = response.urljoin(href.extract())
            yield scrapy.Request(full_url, callback=self.parse_question)

    def parse_question(self, response):
        yield {
            'title': response.css('h1 a::text').extract()[0],
            'votes': response.css('.question .vote-count-post::text').extract()[0],
            'body': response.css('.question .post-text').extract()[0],
            'tags': response.css('.question .post-tag::text').extract(),
            'link': response.url,
        }

将上述代码存入到某个文件中,以类似于 stackoverflow_spider.py 命名, 并且使用 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值