【爬虫之scrapy框架——尚硅谷(学习笔记one)--基本步骤和原理+爬取当当网(基本步骤)】

本文主要是介绍【爬虫之scrapy框架——尚硅谷(学习笔记one)--基本步骤和原理+爬取当当网(基本步骤)】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

爬虫之scrapy框架——基本原理和步骤+爬取当当网(基本步骤)

    • 下载scrapy框架
    • 创建项目(项目文件夹不能使用数字开头,不能包含汉字)
    • 创建爬虫文件
        • (1)第一步:先进入到spiders文件中(进入相应的位置)
        • (2)第二步:创建爬虫文件
        • (3)第三步:查看创建的项目文件——检查路径是否正确
    • 运行爬虫代码
    • 查看robots协议——是否有反爬取机制——君子协议(修改君子协议)
        • (1)查看某网站的君子协议
        • (2)修改settings文件中君子协议
    • scrapy项目的结构
    • response的常用属性和方法
    • scrapy框架原理解析
    • scrapy sell 工具调试——具体下载不说明
    • 当当网爬取案例
        • 1. 创建当当网爬虫项目
        • 2. 检查网址
        • 3. 在函数中打印一条数据,看是否网站有反爬机制
        • 4. 定义数据结构——选择要爬取哪些属性
        • 5. 去网址分析数据——拿到xpath表达式
          • (1)拿到图片
          • (2)拿到名字
          • (3)拿到价格
        • 6. 编写函数
        • 7.运行后拿到数据
        • 8.保存数据
          • (1)封装数据——yield提交给管道![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4aeebbc751de48d6b56f457a91bc0c65.png)
          • (2)开启管道——保存内容
        • 9.多条管道下载
          • (1)定义管道类
          • (2)在settings中开启管道
        • 10.多页数据的下载
          • (1)定义一个基本网址和page
          • (2)重新调用def parse(self, response):函数——编写多页请求
          • (3)修改allowed_domains的范围——一半多页请求范围编写域名即可
        • 11.爬取核心代码

下载scrapy框架

scrapy安装视频链接

创建项目(项目文件夹不能使用数字开头,不能包含汉字)

cmd:

scrapy startproject 项目名称

请添加图片描述

创建爬虫文件

(1)第一步:先进入到spiders文件中(进入相应的位置)
cd 项目的名字\项目的名字\spiders
(2)第二步:创建爬虫文件
scrapy genspider 爬虫文件的名字 要爬取的网页网址

在这里插入图片描述

(3)第三步:查看创建的项目文件——检查路径是否正确

注意:不满足时需要手动修改(版本不同,造成的结果不一)
在这里插入图片描述

运行爬虫代码

scrapy crawl 爬虫的名字

查看robots协议——是否有反爬取机制——君子协议(修改君子协议)

(1)查看某网站的君子协议

请添加图片描述

(2)修改settings文件中君子协议

在这里插入图片描述

scrapy项目的结构

在这里插入图片描述

response的常用属性和方法

(1)爬去网站的源码数据

content_1=response.txt

(2)爬去网站的二进制源码数据

response.body

(3)xpath方法可以用来解析response中的内容

response.xpath('')

(4)extract方法用来提取seletor对象的data属性值

response.extract()

(5)extract_first方法用来提取seletor列表的第一个数据

response.extract()

scrapy框架原理解析

在这里插入图片描述

scrapy sell 工具调试——具体下载不说明

(1)进入scrapy shell工具

scrapy shell 网址

请添加图片描述
(2)可以看见有一个response对象
请添加图片描述
(3)可以对response对象进行操作调试(不用像项目一样每次多要运行项目,减少麻烦)
请添加图片描述

当当网爬取案例

1. 创建当当网爬虫项目

在这里插入图片描述

2. 检查网址

在这里插入图片描述

3. 在函数中打印一条数据,看是否网站有反爬机制

图1在这里插入图片描述

图2
在这里插入图片描述

4. 定义数据结构——选择要爬取哪些属性

在这里插入图片描述

5. 去网址分析数据——拿到xpath表达式
(1)拿到图片

请添加图片描述

(2)拿到名字

请添加图片描述

(3)拿到价格

在这里插入图片描述

6. 编写函数

(1)懒加载处理

图1——非第一张图片(懒加载——有data-original)在这里插入图片描述图2——第一张图片和其他的图片的属性值不一样
注:第一张可以用src,其他的用data-original
请添加图片描述
(2)代码解释如图:
请添加图片描述

7.运行后拿到数据
scrapy crawl 爬虫的名字

在这里插入图片描述

8.保存数据
(1)封装数据——yield提交给管道在这里插入图片描述
(2)开启管道——保存内容

图1在这里插入图片描述
图2在这里插入图片描述

9.多条管道下载
(1)定义管道类

在这里插入图片描述

(2)在settings中开启管道

在这里插入图片描述

10.多页数据的下载
(1)定义一个基本网址和page

在这里插入图片描述

(2)重新调用def parse(self, response):函数——编写多页请求

在这里插入图片描述

(3)修改allowed_domains的范围——一半多页请求范围编写域名即可

在这里插入图片描述

11.爬取核心代码
import scrapy
from scrapy_dangdang_095.items import ScrapyDangdang095Itemclass DangSpider(scrapy.Spider):name = "dang"#如果是多页请求的话,需要调整 allowed_domains的范围——一般情况下只写域名allowed_domains = ["category.dangdang.com"]start_urls = ["https://category.dangdang.com/cp01.28.01.12.00.00.html"]# 第二页第三页的网址——一个网站数据结构应该是一样的# http://category.dangdang.com/pg2-cp01.28.01.12.00.00.html# http://category.dangdang.com/pg3-cp01.28.01.12.00.00.html#根网址base_url="https://category.dangdang.com/pg"page=1def parse(self, response):#pipelines 下载数据#items 定义数据结构#   print('检验是否有反爬机制')#   src=//ul[@id="component_59"]/li//img/@src#   alt=//ul[@id="component_59"]/li//img/@alt#   price=//ul[@id="component_59"]/li//p[@class="price"]/span[1]/text()#   共享li标签——所有的seletor对象,都可以再次调用xpath方法#拿数据li_list=response.xpath('//ul[@id="component_59"]/li')for li in li_list:#都返回的是列表src=li.xpath('.//img/@data-original').extract_first()#第一张图片和其他的图片的属性值不一样#第一张可以用src,其他的用data-original#反爬的——懒加载if src:scr=srcelse:src=li.xpath('.//img/@src').extract_first()name=li.xpath('.//img/@alt').extract_first()price=li.xpath('.//p[@class="price"]/span[1]/text()').extract_first()#导数据结构的包,使用定义的数据结构#from scrapy_dangdang_095.items import ScrapyDangdang095Item#遍历一下,得到一个对象——————将定义的数据封装为book#book=ScrapyDangdang095Item(src=src,name=name,price=price)#yield就是类似return,返回一个值——————获取一个book就将对象交给管道piplines——————再保存yield book# 第二页第三页的网址——一个网站数据结构应该是一样的# http://category.dangdang.com/pg2-cp01.28.01.12.00.00.html# http://category.dangdang.com/pg3-cp01.28.01.12.00.00.html#ctrl+z暂停下载#ctrl+alt+l,整理json数据格式#多页请求代码——多页请求代码——多页请求代码——多页请求代码#别忘记改变allowed_domains=属性的范围——一般只写域名if self.page<100:#第一页已经爬取完毕#所以直接加一self.page=self.page+1#将self.page强转为字符串url=self.base_url+str(self.page)+'-cp01.28.01.12.00.00.html'#去调用parse方法#scrapy.Request就是scrapy的get请求#callback属性就是要执行哪一个函数——注意不要加括号()yield scrapy.Request(url=url,callback=self.parse)

这篇关于【爬虫之scrapy框架——尚硅谷(学习笔记one)--基本步骤和原理+爬取当当网(基本步骤)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/986835

相关文章

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

Spring IOC核心原理详解与运用实战教程

《SpringIOC核心原理详解与运用实战教程》本文详细解析了SpringIOC容器的核心原理,包括BeanFactory体系、依赖注入机制、循环依赖解决和三级缓存机制,同时,介绍了SpringBo... 目录1. Spring IOC核心原理深度解析1.1 BeanFactory体系与内部结构1.1.1

Python多任务爬虫实现爬取图片和GDP数据

《Python多任务爬虫实现爬取图片和GDP数据》本文主要介绍了基于FastAPI开发Web站点的方法,包括搭建Web服务器、处理图片资源、实现多任务爬虫和数据可视化,同时,还简要介绍了Python爬... 目录一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务

Java 操作 MinIO详细步骤

《Java操作MinIO详细步骤》本文详细介绍了如何使用Java操作MinIO,涵盖了从环境准备、核心API详解到实战场景的全过程,文章从基础的桶和对象操作开始,到大文件分片上传、预签名URL生成... 目录Java 操作 MinIO 全指南:从 API 详解到实战场景引言:为什么选择 MinIO?一、环境

python调用dubbo接口的实现步骤

《python调用dubbo接口的实现步骤》本文主要介绍了python调用dubbo接口的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录 ​​其他实现方式与注意事项​​ ​​高级技巧与集成​​用 python 提供 Dubbo 接口

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS