Scrapy基础详解

news/2024/7/19 11:39:46 标签: 爬虫, python

Scrapy框架

  • 什么是scrapy框架
    Scrapy 是一个为了抓取网页数据、提取结构性数据而编写的应用框架,该框架是封装的,包含 request (异步调度和处理)、下载器(多线程的 Downloader)、解析器(selector)和 twisted(异步处理)等。对于网站的内容爬取,其速度非常快捷。

  • 安装
    pip install scrapy

  • 创建一个工程(终端):

python"># 在终端运行如下命令
# 第一步 创建项目
  scrapy startproject xxx    # xxx是项目的名称
# 第二步 进入项目
  cd xxx 
# 第三步 创建爬虫文件 
scrapy genspider spiderName www.xxxxx.com   # 网址为你要爬取的网站刚开始也可以随意写,后面可以在项目中改

创建项目完成后的文件目录结构
在这里插入图片描述

各文件的作用(根据我自己的项目)

  • scrapy.cfg: 项目的配置文件,一般不需要更改。
  • scrapy文件夹 存放爬虫代码
    • wangyi.py: 爬虫代码,初步处理数据
  • items.py: 定义爬取的数据类,
  • middlewares.py 中间件文件,自定义
  • pipelines.py: 管道文件 接受item.py中的数据 当我们的items被返回的时候,会自动调用我们的pipelines类中process_item()(需要加到settings.py里面)
  • settings.py: 项目的设置文件。设置伪装方式,ip代理
  • piders/: 放置spider代码的目录。

执行工程:
- scrapy crawl spiderName # 运行项目

  • scrapy持久化存储:

    • 基于管道:
      • 编码流程:
        • 数据解析
        • 在item中定义相关属性
        • 将解析的数据封装储存到list类型的对象
        • 将item类型的对象提交给管道进行持久化存储的操作
        • 在管道类的process_item中要将其接受到的item对象中存储的数据进行持久化存储操作
        • 在配置文件中开启管道
      • 好处:
        • 通用性强
    • 面试题
      将爬取到的数据一份存储到本地,一份存储到数据库,如何实现
      • 管道文件中一个管道类对应的是将数据储存到一个平台
      • 爬虫文件提交的item只会给管道文件中第一个被执行的管道类接受
      • process_item中的return item 表示将item传递给下一个即将被执行的管道类
  • scrapy五大核心组件:

    • 引擎
      • 用来处理整个数据流处理,触发事务(框架的核心)
    • 调度器
      • 用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回,可以想象成一个URL(抓取网页的地址或者说是链接)
      • 的优先队列,由它类决定下一个抓取的网址是什么,可以去除重复的网址
    • 下载器:
      • 用于下载网页端的内容,并将网页的内容返回给蜘蛛(Scrapy 下载器是建立在twisted这个高效的异步模型)
    • 爬虫
      • 爬虫主要用来干活,用于从特定的网页中提取自己需要的内容,即所谓的实体item,用户也可以从中提取出链接让Scrapy继续爬取下一个页面
    • 项目管道
      • 负责处理爬虫从网页中抽取到的实体,主要的功能是持久化实体,验证实体的有效性,清楚不需要的信息,当当页面被爬虫解析后
      • 将被发送到项目管道,并经过几个特定的次序处理数据

http://www.niftyadmin.cn/n/1371798.html

相关文章

使用react制作一个pc端便签

app.js import React from react; import "./App.css" import Footer from ./components/footer; import Header from ./components/Header; import List from ./components/List;class App extends React.Component {state {todos: [{ id: 0, name: 吃饭, done: t…

申请JetBrains账号遇到的相关问题及解决方法

申请JetBrains账号遇到的相关问题及解决方法 在申请JetBrains教育账号的时候会遇到各种各样的问题,我根据我遇到的问题写出一些解决办法,具体的申请流程就不在赘述。 JetBrains教育账号以前是只能用教育邮箱,现在可以也可以使用其他的邮箱进…

react+axios实现搜索github用户功能

加载 请求成功 请求失败 在文件路径点击cmd 回车 首先把服务器打开 npm start app.js import React, { Component } from react import "./App.css" import Header from ./conompents/Header import List from ./conompents/List export default class App ex…

Web相关知识

常见状态码: 200 请求成功301 永久重定向,资源网页被永久转移到其他URL302 临时重定向 登录后页面的跳转,多用于页面改变状态后的跳转404 请求网页资源不存在500 内部服务器错误,代码错误 传统的MVC M 模型层,主要用于…

pubsub-js的使用

下载 npm add pubsub-js 导入 接收成功

DRF 使用生coreapi成接口文档遇到的问题‘CSRFCheck‘、‘AutoSchema‘

项目依赖版本: Django 1.11.1Django REST framework 3.10.1python 3.8coreapi 2.3.3 安装依赖 pip install coreapi使用: 项目中的 urls.py # 导入 from rest_framework.documentation import include_docs_urls # 添加路由 urlpatterns [url(rdocs…

爬楼梯 -- 斐波那契数列,尾递归

使用尾递归解决问题 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 1阶台阶 1种方法 2阶台阶 2种方法 3阶台阶 3种 4阶台阶 5种 5阶台阶 8种 。。。所以可以转换成斐波那契数列进行求解def…

力扣 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回0。 假设环境不允许存储 64 位整数(有符号或无符号)。 def reverse(self, x: int) -…