Python爬虫之Scrapy框架基础

Scrapy爬虫框架介绍

  • 文档

    • 英文文档
    • 中文文档
  • 什么是scrapy

    基于twisted搭建的异步爬虫框架.

    scrapy爬虫框架根据组件化设计理念和丰富的中间件, 使其成为了一个兼具高性能和高扩展的框架

  • scrapy提供的主要功能

    • 具有优先级功能的调度器
    • 去重功能
    • 失败后的重试机制
    • 并发限制
    • ip使用次数限制
  • scrapy的使用场景

    • 不适合scrapy项目的场景
      • 业务非常简单, 对性能要求也没有那么高, 那么我们写多进程, 多线程, 异步脚本即可.
      • 业务非常复杂, 请求之间有顺序和失效时间的限制.
      • 如果你不遵守框架的主要设计理念, 那就不要使用框架
    • 适合使用scrapy项目
      • 数据量大, 对性能有一定要求, 又需要用到去重功能优先级功能的调度器
  • scrapy组件

    • ENGINESPIDERS中获取初始请求任务Requests
    • ENGINE得到Requests之后发送给SCHEDULER, SCHEDULER对请求进行调度后产出任务.
    • Scheduler返回下一个请求任务给ENGINE
    • ENGINE将请求任务交给DOWNLOADER去完成下载任务, 途径下载器中间件.
    • 一旦下载器完成请求任务, 将产生一个Response对象给ENGINE, 途径下载器中间件
    • ENGINE收到Response对象后, 将该对象发送给SPIDERS去解析和处理, 途径爬虫中间件
    • SPIDER解析返回结果
      • 将解析结果ITEMS发送给ENGINE
      • 生成一个新的REQUESTS任务发送给ENGINE
    • 如果ENGINE拿到的是ITEMS, 那么就会发送给ITEM PIPELINES做数据处理, 如果是REQUESTS则发送给SCHEDULER
    • 周而复始, 直到没有任务产出

Scrapy教程

  • 安装
  pip install scrapy
  • 创建项目
 scrapy startproject jd_crawler_scrapy
  • 目录结构

    • spiders(目录)

      存放SPIDERS项目文件, 一个scrapy项目下可以有多个爬虫实例

    • items

      解析后的结构化结果.

    • middlewares

      下载器中间件和爬虫中间件的地方

    • piplines

      处理items的组件, 一般都在pipelines中完成items插入数据表的操作

    • settings

      统一化的全局爬虫配置文件

    • scrapy.cfg

      项目配置文件

  • scrapy爬虫demo

  
  
  import scrapy
  
  
  class JdSearch(scrapy.Spider):
      name = "jd_search"
  
      def start_requests(self):
          for keyword in ["鼠标", "键盘", "显卡", "耳机"]:
              for page_num in range(1, 11):
                  url = f"https://search.jd.com/Search?keyword={keyword}&page={page_num}"
  
                  # 选用FormRequest是因为它既可以发送GET请求, 又可以发送POST请求
                  yield scrapy.FormRequest(
                      url=url,
                      method='GET',
                      # formdata=data,             # 如果是post请求, 携带数据使用formdata参数
                      callback=self.parse_search   # 指定回调函数处理response对象
                  )
  
  
      def parse_search(self, response):
          print(response)
  
  • 启动爬虫
scrapy crawl spider_name
  • 大家如果对爬虫感兴趣的话,可以添加下方好友,免费测试7天IP池哦。
  • 在这里插入图片描述
  • 回归正题

Scrapy的启动和debug

  • 命令行
    scrapy crawl jd_search
  • 启动脚本
    # 新建run.py
    
    from scrapy import cmdline
    
    command = "scrapy crawl jd_search".split()
    cmdline.execute(command)
    

Scrapy的中间件

  • 请求头中间件
    class UAMiddleware:
        def process_request(self, request, spider):
            request.headers["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/534034.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于spring boot的大学生体质测试管理系统

基于spring boot的大学生体质测试管理系统设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 …

【SQL Sever】3. 用户管理 / 权限管理

1. 创建登录名/用户/角色 在SQL Server中,创建用户通常涉及几个步骤。 首先,你需要创建一个登录名,然后你可以基于这个登录名在数据库中创建一个用户。 以下是如何做到这一点的步骤和相应的SQL语句: 创建登录名 首先&#xff0c…

面试算法-171-翻转二叉树

题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 解 class Solution {public TreeNode invertTree(TreeNode root) {if (root n…

STM32电机控制SDK实战

一、前言 本次测试基于ST开发板NUCLEO-F302R8,驱动板X-NUCLEO-IHM07M1,使用无刷直流电机BLDC实现FOC控制;采样三霍尔传感器检测电机转子位置;基于速度环闭环控制实现电机转动; 二、实战环境 软件环境: 1…

IP地址查询的应用

IP地址是互联网中用于唯一标识设备的数字地址,通过查询IP地址,我们可以获取到与之相关的各种信息。IP地址查询在网络安全、网络管理、市场营销等领域都有着广泛的应用。本文将探讨IP地址查询的各种应用场景及其重要性。 IP地址准查询:IP数据…

【架构六】系统架构风格

一、数据流风格 批处理:每一步都是独立的,并且每一步都是顺序执行的,只有当前一步处理完毕后,后一步处理才开始。数据必须是完整的,作为一个整体进行传递。如日志分析、计费程序等。管道/过滤器:每个构件都…

50-服务编排(下):基于Helm的服务编排部署实战

制作IAM Chart包 我们假设IAM项目源码根目录为${IAM_ROOT},进入 ${IAM_ROOT}/deployments目录,在该目录下创建Chart包。具体创建流程分为四个步骤, 第一步,创建一个模板Chart。 Chart是一个组织在文件目录中的集合,…

【汇编语言实战】已知10个整数求最大值

C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a[]{11,33,23,54,12,51,2,4,34,45};int maxa[0];for(int i1;i<9;i){if(a[i]>max){maxa[i];}}printf("%d",max); }汇编语言&#xff1a; include irvine32.inc .data arr dword 11…

深入了解Redis——持久化

一&#xff0c;Redis持久化 Redis持久化即将内存中的数据持久化到磁盘中&#xff0c;在下一次重启后还能进行使用&#xff0c;Redis持久化分为RDB和AOF两种&#xff0c;我们接下来分别介绍RDB和AOF的内部原理和区别 RDB Redis运行时会将当前的内存快照存入至磁盘中&#xff…

c++ 字符串与STL用法

文章目录 StringVector构造增加删除大小清空排序 map定义添加数据遍历数据查找清空删除长度判断空交换排序常用用法 String Vector vector是动态扩充的数组 构造 ​ vector()​:创建一个空vectorvector(int nSize)​:创建一个vector,元素个数为nSize​vector(int nSize,co…

【MATLAB】基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据(附代码)

基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据 WiFi指纹匹配是室内定位最为基础和常见的研究&#xff0c;但是WiFi指纹的采集可以称得上是labor-intensive和time-consuming。现在&#xff0c;给大家分享一下我们课题组之前在做WiFi指纹定位时的基于射线跟踪技术仿真WiFi…

Josephus排列:组合数学与跨学科应用

Josephus排列&#xff1a;组合数学与跨学科应用 一、背景二、定义和历史三、问题的形式化描述四、解决方案4.1 n2&#xff0c;任意m4.2 m1&#xff0c;任意n4.3 n为奇数&#xff0c;m为偶数4.4 n和m都是奇数 五、红黑树简介六、Josephus排列问题描述七、使用红黑树解决Josephus…

设计模式之备忘录模式(上)

备忘录模式 1&#xff09;概述 1.定义 在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;可以在以后将对象恢复到原先保存的状态。 2.作用 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便…

展厅设计方案需要考虑哪些因素环节

1、整体展厅规划 整体规划是展厅搭建中需要优先考虑的环节&#xff0c;必须为搭建成本和效果提供坚实的基础。需确定整体展厅面积、展厅的使用目的、产品布局以及进入展厅的路线、确定展厅的整体框架之后&#xff0c;还需考虑展品种类、产生的呈现效果&#xff0c;这些都将影响…

el-table动态合并列

需要合并列&#xff0c;并且不确定需要合并多少列的&#xff0c;可以参照如下代码 首先需要再el-table上传入span-method方法 arraySpan({ row, column, rowIndex, columnIndex }){if (row.groupName 汇总 && columnIndex 0) {return [0,0]} else if (row.groupName…

迷宫 — — 蓝桥杯(动态规划)

迷宫 题目&#xff1a; 输入样例&#xff1a; 3 1 1 1 2 3 4 5 6 7 8 9 2 2 1 3 1 R输出样例&#xff1a; 21思路&#xff1a; 题目大意&#xff1a;给定一个n x m的平面网格&#xff0c;并且每一个格子都有一定的代价&#xff0c;并且设有障碍物和陷阱&#xff0c;障碍物的意…

win11 连接海康摄像头 ONVif协议

目录 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 海康摄像头设置支持onvif协议 安装onvif协议 onvif协议示例代码 Win 11 通过脚本打开自带的IE浏览器访问海康摄像头 第一步、桌面右键新建一个 txt 的文档 第二步、打开文档并且复制粘贴下面代码 CreateObject(&…

【科研】搜索文献的网站

文章目录 paperswithcode【最新论文&#xff0c;代码】huggingface【大语言模型&#xff0c;最新论文】dblp【关键词搜索】arxiv【最新文章】semanticscholar【相关引用查询】connectedpapers【相关引用查询】github【工程&#xff0c;代码&#xff0c;论文开源代码】 paperswi…

OV证书为什么更可信

在网络安全领域&#xff0c;SSL/TLS证书扮演着至关重要的角色&#xff0c;其中组织验证&#xff08;Organization Validation&#xff0c;简称OV&#xff09;证书以其深度验证机制和高度可信性脱颖而出。 OV证书为何更值得信赖&#xff0c;关键在于其严格的验证流程。 首先&am…

金三银四面试题(十九):MySQL中的锁

在MySQL中&#xff0c;锁是非常重要的&#xff0c;特别是在多用户并发访问数据库的环境中&#xff0c;因此也是面试中常问的话题。 请说说数据库的锁&#xff1f; 关于MySQL 的锁机制&#xff0c;可能会问很多问题&#xff0c;不过这也得看面试官在这方面的知识储备。 MySQL …