Scrapy框架自学

配置国内镜像源

# pip设置配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set trusted-host pypi.tuna.tsinghua.edu.cn

创建虚拟环境

# 使用conda创建虚拟环境(具体内容请参考课件)
conda create -n py_spider python=3.9

删除虚拟环境

# 使用conda删除虚拟环境
conda remove --name py_spider --all

列出所有虚拟环境

conda info -e
  1. 包的导出

    • 使用 pip list
    • 或者 pip freeze
  2. 导入

    • 使用 pip install -r ./requirements.txt

异步与同步的理解

在网络框架中,同步(Synchronous)和异步(Asynchronous)是指处理任务和响应的两种不同方式。

同步

  • 阻塞式操作:任务一个接着一个执行,一个任务执行完成之前,会阻塞程序的执行,直到这个任务完全完成或者返回结果。
  • 按顺序执行:任务按照它们被调用的顺序执行,一个任务的执行会等待另一个任务的结束。
  • 易于理解:同步方式的代码流程简单,易于理解和编写。

异步

  • 非阻塞式操作:任务执行时不会等待结果返回,而是继续执行下一个任务,不会阻塞程序的运行。
  • 并发执行:多个任务可以并发执行,不需要等待其他任务的完成。
  • 回调机制:异步编程常常使用回调函数或者事件处理机制,当一个任务完成时会触发相应的回调函数来处理结果。

区别

  1. 执行方式:同步是顺序执行,任务一个接着一个执行;异步是并发执行,任务不会等待其他任务完成。
  2. 阻塞行为:同步编程会阻塞程序执行,直到任务完成;异步编程不会阻塞程序执行,允许其他任务继续执行。
  3. 代码复杂度:异步编程可能会引入回调、事件处理等机制,使得代码复杂度增加,但在高并发场景下,异步能够提高系统的性能和响应速度。

在网络框架中,异步编程常用于需要处理大量并发请求的场景,比如Web服务器处理大量同时到达的HTTP请求时,异步方式能够更高效地利用系统资源,提高系统的吞吐量和响应速度。

自我理解:异步不一定是并发,但并发一定是异步。

问题:为什么并发是非堵塞。

在这里插入图片描述

同步:发送一个请求,等待返回,然后再发送下一个请求。异步:发送一个请求,不等待返回,随时可以再发送下一个请求。

同步爬虫流程

在这里插入图片描述

  1. 创建网站列表,发送request请求,得到响应内容。
  2. 对内容进行数据清洗。
  3. 数据提取。
  4. 存入数据表。

优化后的流程

在这里插入图片描述

线程爬虫,如果都放在同一列表中,会有竞争。拿请求的代码是加锁,解锁。利用队列,线程安全。只多了数据队列部分。内容提取可能导致两个项目录入同一个库表中。如果存入队列,则读取时,直接pop。提取新的url后,重新放到url队列。

Scrapy流程

在这里插入图片描述

多了爬虫引擎负责调度任务。

模块作用

  • 调度器:本质是队列,用来存放引擎的request请求。
  • 下载器:返回响应给引擎发来的request请求。

(只需手写Spider、pipline管道)

Scrapy的应用

  1. 创建Scrapy项目:
scrapy startproject mySpider
  1. 生成一个爬虫:
scrapy genspider douban movie.douban.com
  1. 查看Scrapy版本:
pip show scrapy

项目结构说明:

  • init.py:模块文件。
  • items.py:movie_nameupdate_time。
  • settings.py:设置headers、cookie、线程数、rebot。

列表分为单向列表和双向列表,它可以当做队列使用。

Hope this helps! 如果有其他需要,欢迎告诉我。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Deep Reinforment Learning Note 1

文章目录 Terminology Terminology st : stateot : observationat : action π θ ( a t ∣ o t ) \pi_\theta (a_t | o_t) πθ​(at​∣ot​) : policy π θ ( a t ∣ s t ) \pi_\theta (a_t | s_t) πθ​(at​∣st​) : policy (fully observed) Observation result from…

基础篇_快速入门(Java简介,安装JDK,cmd命令行运行Java文件产生乱码问题的解决方式,IDE工具,实用工具)

文章目录 一. Java 简介1. JVM2. JRE3. JDK 二. 安装 JDK1. 下载和安装2. 配置 Path3. 配置 JAVA_HOME(选讲)优化 三. 入门案例1. 第一行代码1) jshell2) 代码解读总结 3) 为何要分成对象与方法 2. 第一份源码1) 源码结构2) 编写 java 源代码3) 编译 jav…

JWT---JSON Web Token

JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 JSON Web Token的结构是什么样的 JSON…

Java的Netty

1.基本概念介绍 有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Proxy服务器等等。 Netty 是一个基于 Java 的高性能网络应…

Win系统搭建Elasticsearch实现公网远程访问本地服务

文章目录 系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎,它提供了一个分布式、多…

docker/华为云cce 部署nacos 2.3.0 集群模式

镜像地址 https://hub.docker.com/r/nacos/nacos-server 版本 nacos/nacos-server:v2.3.0-slim 关键环境变量 使用mysql数据源 变量值备注MODEcluster启用集群模式MYSQL_SERVICE_DB_NAME数据库名MYSQL_SERVICE_USER数据库用户名MYSQL_SERVICE_PASSWORD数据库密码SPRING_D…

static

static static是表示静态,是java里面的一个修饰符,可以修饰成员方法,成员变量 静态变量 被static修饰的变量,叫静态变量, 特点: 1.被该类所有的对象共享 , 2.不属于对象,属于类 3…

freeRTOS总结(五)临界段代码保护

1,临界段代码保护简介 1、1什么是临界段 临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段 1.2适用场合如 1、外设初始化:需严格按照时序初始化的外设:IIC、SPI等等 2,系统 系统自身需求 3、用户…

C++学习笔记(三十二):c++ 堆内存与栈内存比较

本节对堆和栈内存进行描述。 应用程序启动后,操作系统将整个程序加载到内存,分配相应的物理ram,确保程序可以正常运行。堆和栈是ram中存在的两个区域。栈通常是一个预定义大小的内存区域,一般是2M字节左右。堆也是预定了默认值的…

如果你还忍受校园网,那么一定要看它!随身WiFi哪个品牌最靠谱 ?高人气随身WiFi第一名

很多学生党反映校园网价格太贵,贵就算了,还非常不好用,真的很泪崩。 对于学生党来说,一个性价比极高的随身WiFi才是正正好。 但是很多学生党对随身WiFi并不了解,那么下面我就回答几个学生党最关心的问题。一、价格合…

AI系统ChatGPT网站系统源码AI绘画详细搭建部署教程,支持GPT语音对话+DALL-E3文生图+GPT-4多模态模型识图理解

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

SpringBoot-开启Admin监控服务

SpringBoot-Admin是一个用于管理和监控SpringBoot应用程序的开源项目。它提供了一个易于使用的Web界面,可以实时监控应用程序的健康状况、性能指标、日志和环境配置等信息。通过Actuator模块来收集和暴露应用程序的监控信息,使用Web Socket或者Server-Se…